summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sources/scalac/symtab/Type.java5
-rw-r--r--sources/scalac/typechecker/RefCheck.java11
-rw-r--r--test/files/neg/bug145.scala1
-rw-r--r--test/neg/bug145.scala1
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));
}
+