summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2004-04-04 16:42:21 +0000
committerpaltherr <paltherr@epfl.ch>2004-04-04 16:42:21 +0000
commitb88fd07ae63caab830d3cd457dcefc3ed69073ed (patch)
treeed8320012c3526245ea3e93eccda5bbc5fe7ff2f /sources
parentbf2c43a88b365ab814dffc2defd99d2c75fd065c (diff)
downloadscala-b88fd07ae63caab830d3cd457dcefc3ed69073ed.tar.gz
scala-b88fd07ae63caab830d3cd457dcefc3ed69073ed.tar.bz2
scala-b88fd07ae63caab830d3cd457dcefc3ed69073ed.zip
- Added class ErrorScope
Diffstat (limited to 'sources')
-rw-r--r--sources/scalac/symtab/Scope.java21
-rw-r--r--sources/scalac/symtab/Symbol.java3
2 files changed, 23 insertions, 1 deletions
diff --git a/sources/scalac/symtab/Scope.java b/sources/scalac/symtab/Scope.java
index 490f0e30a1..e91789d107 100644
--- a/sources/scalac/symtab/Scope.java
+++ b/sources/scalac/symtab/Scope.java
@@ -330,3 +330,24 @@ public class Scope {
public static Scope EMPTY = new Scope();
}
+public class ErrorScope extends Scope {
+
+ private final Symbol owner;
+
+ public ErrorScope(Symbol owner) {
+ this.owner = owner;
+ }
+
+ public Entry lookupEntry(Name name) {
+ Entry entry = super.lookupEntry(name);
+ if (entry.sym.isNone()) {
+ Symbol symbol = name.isTermName()
+ ? owner.newErrorValue(name)
+ : owner.newErrorClass(name);
+ enter(symbol);
+ entry = super.lookupEntry(name);
+ }
+ return entry;
+ }
+
+}
diff --git a/sources/scalac/symtab/Symbol.java b/sources/scalac/symtab/Symbol.java
index f3bf69bd3b..7670e31c6e 100644
--- a/sources/scalac/symtab/Symbol.java
+++ b/sources/scalac/symtab/Symbol.java
@@ -301,7 +301,8 @@ public abstract class Symbol implements Modifiers, Kinds {
*/
public ClassSymbol newErrorClass(Name name) {
ClassSymbol symbol = newClass(pos, SYNTHETIC, name, IS_ERROR, NONE);
- symbol.setInfo(Type.ErrorType);
+ Scope scope = new ErrorScope(this);
+ symbol.setInfo(Type.compoundType(Type.EMPTY_ARRAY, scope, this));
symbol.allConstructors().setInfo(Type.ErrorType);
return symbol;
}