diff options
author | paltherr <paltherr@epfl.ch> | 2004-04-04 18:37:59 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2004-04-04 18:37:59 +0000 |
commit | 6b35acd807e982b5296eb05898561ea8664bf2a3 (patch) | |
tree | 4c39fe37f0dcd827eb7582eb0b4b564074b20acc /sources/scalac/symtab | |
parent | 8127c2eeeff7ee3a3f65a205020d50c4c5cdba16 (diff) | |
download | scala-6b35acd807e982b5296eb05898561ea8664bf2a3.tar.gz scala-6b35acd807e982b5296eb05898561ea8664bf2a3.tar.bz2 scala-6b35acd807e982b5296eb05898561ea8664bf2a3.zip |
- Added method Type.isError
Diffstat (limited to 'sources/scalac/symtab')
-rw-r--r-- | sources/scalac/symtab/Type.java | 25 | ||||
-rw-r--r-- | sources/scalac/symtab/classfile/CLRClassParser.java | 2 |
2 files changed, 23 insertions, 4 deletions
diff --git a/sources/scalac/symtab/Type.java b/sources/scalac/symtab/Type.java index 8fb835786b..bbd0455423 100644 --- a/sources/scalac/symtab/Type.java +++ b/sources/scalac/symtab/Type.java @@ -154,7 +154,7 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags { "illegal cyclic reference involving " + rebind); sym = rebind.rebindSym(); } - if (pre.isStable() || pre == ErrorType) { + if (pre.isStable() || pre.isError()) { return new ExtSingleType(pre, sym); } else { throw new Type.Malformed(pre, sym.nameString() + ".type"); @@ -197,7 +197,7 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags { } public static Type typeRef(Type pre, Symbol sym, Type[] args) { - if (!pre.isLegalPrefix() && pre != ErrorType) + if (!pre.isLegalPrefix() && !pre.isError()) throw new Type.Malformed(pre, sym.nameString()); rebind: if (sym.isAbstractType()) { @@ -225,7 +225,7 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags { return new ExtTypeRef(pre, sym, args); } private static boolean isLegalTypeRef(Type pre, Symbol sym, Type[] args) { - if (!pre.isLegalPrefix() && pre != ErrorType) return false; + if (!pre.isLegalPrefix() && !pre.isError()) return false; if (!sym.isType() && !sym.isError()) return false; // !!! return args.length == 0 || args.length == sym.typeParams().length; return true; @@ -642,6 +642,25 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags { // Tests -------------------------------------------------------------------- + /** Is this type a an error type? + */ + public boolean isError() { + switch (this) { + case ErrorType: + return true; + case ThisType(Symbol clasz): + return clasz.isError(); + case SingleType(_, Symbol symbol): + return symbol.isError(); + case TypeRef(_, Symbol symbol, _): + return symbol.isError(); + case CompoundType(Type[] parts, Scope members): + return symbol().isError(); + default: + return false; + } + } + /** Is this type a this type or singleton type? */ public boolean isStable() { diff --git a/sources/scalac/symtab/classfile/CLRClassParser.java b/sources/scalac/symtab/classfile/CLRClassParser.java index 8ac897cca5..0ec6df58a4 100644 --- a/sources/scalac/symtab/classfile/CLRClassParser.java +++ b/sources/scalac/symtab/classfile/CLRClassParser.java @@ -275,7 +275,7 @@ public class CLRClassParser extends SymbolLoader { assert type != null; scalac.symtab.Type res = make.classType(type.FullName.replace('+', '.')); - if (res == scalac.symtab.Type.ErrorType) + if (res.isError()) global.error("unknown class reference " + type.FullName); return res; } |