summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2003-10-20 20:10:03 +0000
committerMartin Odersky <odersky@gmail.com>2003-10-20 20:10:03 +0000
commitafc36c22f41a120fb0bf3738e572cbe2dd9ce69a (patch)
tree5afe16bc6ef2140f598f9071451e5a3b3ab5251e /sources
parent17e61a1faa30747564438c25e54ce80e6923a79f (diff)
downloadscala-afc36c22f41a120fb0bf3738e572cbe2dd9ce69a.tar.gz
scala-afc36c22f41a120fb0bf3738e572cbe2dd9ce69a.tar.bz2
scala-afc36c22f41a120fb0bf3738e572cbe2dd9ce69a.zip
*** empty log message ***
Diffstat (limited to 'sources')
-rw-r--r--sources/scalac/symtab/Type.java5
-rw-r--r--sources/scalac/typechecker/RefCheck.java11
2 files changed, 10 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);