diff options
author | Martin Odersky <odersky@gmail.com> | 2004-11-19 19:01:38 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2004-11-19 19:01:38 +0000 |
commit | 4d14ec1b71e7432c6e71a28ebc6fccec217e8c2d (patch) | |
tree | 1f63a411e60ff73ba502a6e8e2b6ddff1b52f4a9 /sources/scalac | |
parent | dff9023c169e2c393134b5e38e3a7bbef79b60a9 (diff) | |
download | scala-4d14ec1b71e7432c6e71a28ebc6fccec217e8c2d.tar.gz scala-4d14ec1b71e7432c6e71a28ebc6fccec217e8c2d.tar.bz2 scala-4d14ec1b71e7432c6e71a28ebc6fccec217e8c2d.zip |
*** empty log message ***
Diffstat (limited to 'sources/scalac')
-rw-r--r-- | sources/scalac/symtab/Definitions.java | 4 | ||||
-rw-r--r-- | sources/scalac/symtab/Symbol.java | 14 | ||||
-rw-r--r-- | sources/scalac/symtab/Type.java | 2 |
3 files changed, 16 insertions, 4 deletions
diff --git a/sources/scalac/symtab/Definitions.java b/sources/scalac/symtab/Definitions.java index d57c055760..3a62282059 100644 --- a/sources/scalac/symtab/Definitions.java +++ b/sources/scalac/symtab/Definitions.java @@ -682,8 +682,8 @@ public class Definitions { ANY_CLASS = newClass(SCALA_CLASS, Names.Any, 0); ANYVAL_CLASS = getClass("scala.AnyVal"); ANYREF_CLASS = newAlias(SCALA_CLASS, Names.AnyRef, 0); - ALLREF_CLASS = newClass(SCALA_CLASS, Names.AllRef, 0); - ALL_CLASS = newClass(SCALA_CLASS, Names.All, 0); + ALLREF_CLASS = newClass(SCALA_CLASS, Names.AllRef, Modifiers.ABSTRACT | Modifiers.FINAL); + ALL_CLASS = newClass(SCALA_CLASS, Names.All, Modifiers.ABSTRACT | Modifiers.FINAL); final boolean forMSIL = global.target == Global.TARGET_MSIL; // the java classes diff --git a/sources/scalac/symtab/Symbol.java b/sources/scalac/symtab/Symbol.java index 3390eb7a26..c6ebc39b6f 100644 --- a/sources/scalac/symtab/Symbol.java +++ b/sources/scalac/symtab/Symbol.java @@ -1057,6 +1057,18 @@ public abstract class Symbol implements Modifiers, Kinds { return type().alternativeTypes(); } + /** if type is a overloaded type, return first stable alternative + * else return array symbol itself + */ + public Symbol stableAlternative() { + switch (type()) { + case OverloadedType(Symbol[] alts, _): + for (int i = 0; i < alts.length; i++) + if (alts[i].isStable()) return alts[i]; + } + return this; + } + /** The symbol accessed by this accessor function. */ public Symbol accessed() { @@ -2151,7 +2163,7 @@ public class ClassSymbol extends TypeSymbol { //System.out.println("field accessor = " + sym);//DEBUG } assert sym != null : this; - return sym; + return sym.stableAlternative(); } public final Symbol rebindSym() { diff --git a/sources/scalac/symtab/Type.java b/sources/scalac/symtab/Type.java index 2b2044a872..2a6a3857c2 100644 --- a/sources/scalac/symtab/Type.java +++ b/sources/scalac/symtab/Type.java @@ -152,7 +152,7 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags { if (rebind.isNone()) break rebind; if (rebind.isLocked()) throw new Type.Error( "illegal cyclic reference involving " + rebind); - sym = rebind.rebindSym(); + sym = rebind.rebindSym().stableAlternative(); } if (pre.isStable() || pre.isError()) { return new ExtSingleType(pre, sym); |