summaryrefslogtreecommitdiff
path: root/sources
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
parentdff9023c169e2c393134b5e38e3a7bbef79b60a9 (diff)
downloadscala-4d14ec1b71e7432c6e71a28ebc6fccec217e8c2d.tar.gz
scala-4d14ec1b71e7432c6e71a28ebc6fccec217e8c2d.tar.bz2
scala-4d14ec1b71e7432c6e71a28ebc6fccec217e8c2d.zip
*** empty log message ***
Diffstat (limited to 'sources')
-rw-r--r--sources/scala/tools/scalac/typechecker/Infer.scala2
-rwxr-xr-xsources/scala/tools/scalac/typechecker/RefCheck.scala3
-rw-r--r--sources/scalac/symtab/Definitions.java4
-rw-r--r--sources/scalac/symtab/Symbol.java14
-rw-r--r--sources/scalac/symtab/Type.java2
5 files changed, 19 insertions, 6 deletions
diff --git a/sources/scala/tools/scalac/typechecker/Infer.scala b/sources/scala/tools/scalac/typechecker/Infer.scala
index 579841e75f..c2f475c18b 100644
--- a/sources/scala/tools/scalac/typechecker/Infer.scala
+++ b/sources/scala/tools/scalac/typechecker/Infer.scala
@@ -1260,7 +1260,7 @@ class Infer(global: scalac_Global, gen: TreeGen, make: TreeFactory) extends scal
while (i < alts.length && alts(i).isConstructor() && alttypes(i).isInstanceOf[Type$MethodType])
i = i + 1;
if (i == alts.length)
- throw new Type$Error("missing rguments for " + alts(0));
+ throw new Type$Error("missing arguments for " + alts(0));
}
// second, do the normal case.
var best: int = -1;
diff --git a/sources/scala/tools/scalac/typechecker/RefCheck.scala b/sources/scala/tools/scalac/typechecker/RefCheck.scala
index 8c421dddc7..37e687e21b 100755
--- a/sources/scala/tools/scalac/typechecker/RefCheck.scala
+++ b/sources/scala/tools/scalac/typechecker/RefCheck.scala
@@ -649,8 +649,9 @@ class RefCheck(globl: scalac.Global) extends Transformer(globl) {
val params = sym.getType().firstParams();
if (params.length == 1 && paramtype.isSubType(params(0).getType())) return sym;
}
+ System.out.println(paramtype.widen());//debug
throw new ApplicationError(
- " no method " + name + " of required kind among " + sym.getType() + " at " + site);
+ " no method " + name + " of required kind among " + sym.getType() + " at " + site.widen());
}
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);