diff options
Diffstat (limited to 'sources/scalac/symtab')
-rw-r--r-- | sources/scalac/symtab/Modifiers.java | 1 | ||||
-rw-r--r-- | sources/scalac/symtab/Symbol.java | 4 | ||||
-rw-r--r-- | sources/scalac/symtab/Type.java | 20 |
3 files changed, 14 insertions, 11 deletions
diff --git a/sources/scalac/symtab/Modifiers.java b/sources/scalac/symtab/Modifiers.java index 78c7e81214..cc9111887a 100644 --- a/sources/scalac/symtab/Modifiers.java +++ b/sources/scalac/symtab/Modifiers.java @@ -64,6 +64,7 @@ public interface Modifiers { int SOURCEFLAGS = 0x00000077 | DEF | REPEATED | MODUL | MUTABLE | PACKAGE | PARAM | TRAIT | COVARIANT | CONTRAVARIANT; // these modifiers can be set in source programs. int ACCESSFLAGS = PRIVATE | PROTECTED; int VARIANCES = COVARIANT | CONTRAVARIANT; + int CONSTRFLAGS = ACCESSFLAGS | CASE | JAVA | STATIC; public static class Helper { diff --git a/sources/scalac/symtab/Symbol.java b/sources/scalac/symtab/Symbol.java index 11232638d3..4b710248c6 100644 --- a/sources/scalac/symtab/Symbol.java +++ b/sources/scalac/symtab/Symbol.java @@ -1388,7 +1388,7 @@ public abstract class TypeSymbol extends Symbol { public TypeSymbol(int kind, int pos, Name name, Symbol owner, int flags) { super(kind, pos, name, owner, flags); assert name.isTypeName() : this; - this.constructor = TermSymbol.newConstructor(this, flags & ~MODUL); + this.constructor = TermSymbol.newConstructor(this, flags & CONSTRFLAGS); } protected void update(int pos, int flags) { @@ -1443,7 +1443,7 @@ public abstract class TypeSymbol extends Symbol { /** add a constructor */ public Symbol addConstructor() { - Symbol constr = TermSymbol.newConstructor(this, flags & ~MODUL); + Symbol constr = TermSymbol.newConstructor(this, flags & CONSTRFLAGS); constructor = constructor.overloadWith(constr); return constr; } diff --git a/sources/scalac/symtab/Type.java b/sources/scalac/symtab/Type.java index e9e4d3b024..fac8f18f48 100644 --- a/sources/scalac/symtab/Type.java +++ b/sources/scalac/symtab/Type.java @@ -6,7 +6,7 @@ ** $Id$ \* */ //todo: T {} == T - +//todo: ELiminate phase dependency in AsSeenFromMap package scalac.symtab; @@ -997,12 +997,14 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags { * or `sym' itself if none exists. */ public Symbol rebind(Symbol sym) { - Symbol sym1 = lookupNonPrivate(sym.name); - if (sym1.kind != NONE) { - if ((sym1.flags & LOCKED) != 0) - throw new Type.Error("illegal cyclic reference involving " + sym1); - //System.out.println("rebinding " + sym + " to " + sym1);//DEBUG - return sym1; + if ((sym.flags & (PRIVATE | MODUL)) == 0) { + Symbol sym1 = lookupNonPrivate(sym.name); + if (sym1.kind != NONE) { + if ((sym1.flags & LOCKED) != 0) + throw new Type.Error("illegal cyclic reference involving " + sym1); + //System.out.println("rebinding " + sym + " to " + sym1);//DEBUG + return sym1; + } } return sym; } @@ -1042,7 +1044,7 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags { Type prefix1 = apply(prefix); Type[] args1 = map(args); if (prefix1 == prefix && args1 == args) return t; - Symbol sym1 = (sym.flags & MODUL) == 0 ? prefix1.rebind(sym) : sym; + Symbol sym1 = prefix1.rebind(sym); if (local && sym != sym1) { // Here what we should do is remove the outer // type links of sym from args and then add @@ -1110,7 +1112,7 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags { } /** This type as seen from prefix `pre' and class `clazz'. This means: - * Replace all thistypes of `clazz' or one of its superclasses by `pre' + * Replace all thistypes of `clazz' or one of its subclasses by `pre' * and instantiate all parameters by arguments of `pre'. * Proceed analogously for thistypes referring to outer classes. */ |