diff options
author | paltherr <paltherr@epfl.ch> | 2003-07-04 22:40:47 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2003-07-04 22:40:47 +0000 |
commit | 3c256cfb7474090f3cd4780ac80ad0b4702ff90f (patch) | |
tree | 9bf5b4e3360ec3e9e394e6c20dd58377ef9c7ad0 | |
parent | 0d359a148ea4e839ebce28b1593798e6902ef4aa (diff) | |
download | scala-3c256cfb7474090f3cd4780ac80ad0b4702ff90f.tar.gz scala-3c256cfb7474090f3cd4780ac80ad0b4702ff90f.tar.bz2 scala-3c256cfb7474090f3cd4780ac80ad0b4702ff90f.zip |
- Fixed Symbol.isClass to return false if symbo...
- Fixed Symbol.isClass to return false if symbol is a package Fixed
- Symbol.isAnonymousClass to correctly test the class name Fixed
- Symbol.isLocalClass to use methods isClass and isAnonymousClass Fixed
- GenJVM.javaName (only worked because isAnonymousClass was broken)
- Fixed AddInterfacesPhase.needInterface to return false for anonymous
- classes Adapted AddInterfacesPhase.transformInfo to new definition of
- isClass
-rw-r--r-- | sources/scalac/backend/jvm/GenJVM.java | 9 | ||||
-rw-r--r-- | sources/scalac/symtab/Symbol.java | 11 | ||||
-rw-r--r-- | sources/scalac/transformer/AddInterfacesPhase.java | 6 |
3 files changed, 12 insertions, 14 deletions
diff --git a/sources/scalac/backend/jvm/GenJVM.java b/sources/scalac/backend/jvm/GenJVM.java index 9c18e219fc..aa5998caa8 100644 --- a/sources/scalac/backend/jvm/GenJVM.java +++ b/sources/scalac/backend/jvm/GenJVM.java @@ -613,7 +613,7 @@ class GenJVM { } protected byte genLoadModule(Symbol sym) { - String javaSymName = javaName(sym); + String javaSymName = javaName(sym.moduleClass()); if (javaSymName.equals(currClassName)) currIL.append(ic.THIS); else { @@ -1416,19 +1416,18 @@ class GenJVM { } protected String javaName(Symbol sym) { + assert sym.isClass() : Debug.show(sym); if (sym == defs.ANY_CLASS || sym == defs.ANYREF_CLASS) return JAVA_LANG_OBJECT; else { StringBuffer buf = new StringBuffer(sym.name.toString()); if ((sym.isModule() || sym.isModuleClass()) && !sym.isJava()) buf.append('$'); - for (sym = sym.owner(); - !(sym.isAnonymousClass() || sym.isPackage()); - sym = sym.owner()) { + for (sym = sym.owner(); !sym.isPackage(); sym = sym.owner()) { buf.insert(0, '$'); buf.insert(0, sym.name); } - if (!sym.isAnonymousClass()) { + if (!sym.isRoot()) { buf.insert(0, '.'); buf.insert(0, sym.fullName()); } diff --git a/sources/scalac/symtab/Symbol.java b/sources/scalac/symtab/Symbol.java index 43c2867796..adc38fe975 100644 --- a/sources/scalac/symtab/Symbol.java +++ b/sources/scalac/symtab/Symbol.java @@ -222,9 +222,7 @@ public abstract class Symbol implements Modifiers, Kinds { /* Does this symbol denote an anonymous class? */ public final boolean isAnonymousClass() { - return kind == CLASS && - (name == Names.EMPTY.toTypeName() || - name == Names.ANON_CLASS_NAME.toTypeName()); + return isClass() && name.startsWith(Names.ANON_CLASS_NAME); } /** Does this symbol denote the root class or root module? @@ -262,7 +260,7 @@ public abstract class Symbol implements Modifiers, Kinds { /** Does this symbol denote a class? */ public final boolean isClass() { - return kind == CLASS; + return kind == CLASS && (flags & PACKAGE) == 0; } /** Does this symbol denote a case class? @@ -342,9 +340,8 @@ public abstract class Symbol implements Modifiers, Kinds { * - it is defined within a local class */ public final boolean isLocalClass() { - return kind == CLASS && - !isPackage() && - (name == Names.EMPTY.toTypeName() || + return isClass() && + (isAnonymousClass() || owner.isValue() || owner.isLocalClass()); } diff --git a/sources/scalac/transformer/AddInterfacesPhase.java b/sources/scalac/transformer/AddInterfacesPhase.java index 5d85bf317e..3c51efae91 100644 --- a/sources/scalac/transformer/AddInterfacesPhase.java +++ b/sources/scalac/transformer/AddInterfacesPhase.java @@ -40,8 +40,9 @@ public class AddInterfacesPhase extends PhaseDescriptor { } public Type transformInfo(Symbol sym, Type tp) { - if (sym.isConstructor() - && needInterface(sym.primaryConstructorClass())) { + if (sym.isConstructor()) { + Symbol clazz =sym.primaryConstructorClass(); + if (clazz.isPackage() || !needInterface(clazz)) return tp; // The symbol is a constructor of a class which needs // an interface. All its value arguments have to be // removed. @@ -183,6 +184,7 @@ public class AddInterfacesPhase extends PhaseDescriptor { : Debug.toString(classSym) + " is not a class (kind " + classSym.kind + ")"; return !(classSym.isJava() || classSym.isModuleClass() + || classSym.isAnonymousClass() || hasInterfaceSymbol(classSym) || classSym == Global.instance.definitions.ANY_CLASS || classSym == Global.instance.definitions.ANYREF_CLASS |