summaryrefslogtreecommitdiff
path: root/sources/scalac
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2004-11-19 19:01:38 +0000
committerMartin Odersky <odersky@gmail.com>2004-11-19 19:01:38 +0000
commit4d14ec1b71e7432c6e71a28ebc6fccec217e8c2d (patch)
tree1f63a411e60ff73ba502a6e8e2b6ddff1b52f4a9 /sources/scalac
parentdff9023c169e2c393134b5e38e3a7bbef79b60a9 (diff)
downloadscala-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.java4
-rw-r--r--sources/scalac/symtab/Symbol.java14
-rw-r--r--sources/scalac/symtab/Type.java2
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);