diff options
author | Martin Odersky <odersky@gmail.com> | 2003-10-20 20:10:03 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2003-10-20 20:10:03 +0000 |
commit | afc36c22f41a120fb0bf3738e572cbe2dd9ce69a (patch) | |
tree | 5afe16bc6ef2140f598f9071451e5a3b3ab5251e | |
parent | 17e61a1faa30747564438c25e54ce80e6923a79f (diff) | |
download | scala-afc36c22f41a120fb0bf3738e572cbe2dd9ce69a.tar.gz scala-afc36c22f41a120fb0bf3738e572cbe2dd9ce69a.tar.bz2 scala-afc36c22f41a120fb0bf3738e572cbe2dd9ce69a.zip |
*** empty log message ***
-rw-r--r-- | sources/scalac/symtab/Type.java | 5 | ||||
-rw-r--r-- | sources/scalac/typechecker/RefCheck.java | 11 | ||||
-rw-r--r-- | test/files/neg/bug145.scala | 1 | ||||
-rw-r--r-- | test/neg/bug145.scala | 1 |
4 files changed, 12 insertions, 6 deletions
diff --git a/sources/scalac/symtab/Type.java b/sources/scalac/symtab/Type.java index 1b31035eed..9af1ea5244 100644 --- a/sources/scalac/symtab/Type.java +++ b/sources/scalac/symtab/Type.java @@ -1010,7 +1010,7 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags { return NoType; else { return sym.baseType(clazz) - .asSeenFrom(pre, clazz.owner()) + .asSeenFrom(pre, sym.owner()) .subst(sym.typeParams(), args); } @@ -1060,6 +1060,7 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags { } public Type apply(Type t) { + //System.out.println(t + " as seen from " + pre + "," + clazz);//DEBUG if (pre == NoType || clazz.kind != CLASS) return t; switch (t) { @@ -1124,7 +1125,7 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags { for (int i = 0; i < baseparams.length; i++) { if (sym == baseparams[i]) return baseargs[i]; } - System.out.println(sym + " " + basesym + " " + ArrayApply.toString(baseparams));//debug + //System.out.println(sym + " " + basesym + " " + ArrayApply.toString(baseparams));//DEBUG break; case ErrorType: return ErrorType; diff --git a/sources/scalac/typechecker/RefCheck.java b/sources/scalac/typechecker/RefCheck.java index 080a5b7441..65add5f7de 100644 --- a/sources/scalac/typechecker/RefCheck.java +++ b/sources/scalac/typechecker/RefCheck.java @@ -88,6 +88,11 @@ public class RefCheck extends Transformer implements Modifiers, Kinds { if (i < 0) { unit.error(sym.pos, sym + " overrides nothing"); sym.flags &= ~OVERRIDE; + } else if (sym.isAbstractOverride() && + sym.overriddenSymbol(parents[0]).kind == NONE) { + unit.error(sym.pos, + sym + " does not override a superclass member in " + + parents[0]); } } } @@ -142,10 +147,8 @@ public class RefCheck extends Transformer implements Modifiers, Kinds { } else if (member.isAbstractOverride()) { Type superclazz = clazz.parents()[0]; Symbol sup = member.overriddenSymbol(superclazz); - if (sup.kind == NONE) { - unit.error(member.pos, member + " does not override a superclass member"); - } else if (clazz.kind == CLASS && (clazz.flags & ABSTRACT) == 0 && - isIncomplete(sup)) { + if (clazz.kind == CLASS && (clazz.flags & ABSTRACT) == 0 && + isIncomplete(sup)) { abstractClassError( clazz, member + member.locationString() + " is marked `abstract' and `override' and overrides an incomplete superclass member in " + superclazz); diff --git a/test/files/neg/bug145.scala b/test/files/neg/bug145.scala index edfb6a12a3..5845393ac8 100644 --- a/test/files/neg/bug145.scala +++ b/test/files/neg/bug145.scala @@ -14,3 +14,4 @@ class D extends C with I[Int]; object T with Executable { System.out.println((new D).foo(3)); } + diff --git a/test/neg/bug145.scala b/test/neg/bug145.scala index edfb6a12a3..5845393ac8 100644 --- a/test/neg/bug145.scala +++ b/test/neg/bug145.scala @@ -14,3 +14,4 @@ class D extends C with I[Int]; object T with Executable { System.out.println((new D).foo(3)); } + |