diff options
author | Martin Odersky <odersky@gmail.com> | 2004-01-05 11:38:11 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2004-01-05 11:38:11 +0000 |
commit | 0adfc8d42abed2b4019a866672c497eb5d67e5b9 (patch) | |
tree | 11c3b94a1d6df352d313d0496275cd0dc7db23df /sources/scalac | |
parent | 3b1253891b888c191e9b96d566b3eb304213eeee (diff) | |
download | scala-0adfc8d42abed2b4019a866672c497eb5d67e5b9.tar.gz scala-0adfc8d42abed2b4019a866672c497eb5d67e5b9.tar.bz2 scala-0adfc8d42abed2b4019a866672c497eb5d67e5b9.zip |
*** empty log message ***
Diffstat (limited to 'sources/scalac')
-rw-r--r-- | sources/scalac/symtab/SourceCompleter.java | 5 | ||||
-rw-r--r-- | sources/scalac/symtab/Symbol.java | 3 | ||||
-rw-r--r-- | sources/scalac/symtab/Type.java | 20 | ||||
-rw-r--r-- | sources/scalac/typechecker/RefCheck.java | 4 |
4 files changed, 16 insertions, 16 deletions
diff --git a/sources/scalac/symtab/SourceCompleter.java b/sources/scalac/symtab/SourceCompleter.java index 7aeda28d05..02d739249b 100644 --- a/sources/scalac/symtab/SourceCompleter.java +++ b/sources/scalac/symtab/SourceCompleter.java @@ -56,7 +56,10 @@ public class SourceCompleter extends Type.LazyType { (System.currentTimeMillis() - msec) + "ms"); } catch (IOException e) { if (global.debug) e.printStackTrace(); - global.error("i/o error while loading " + c); + if (mixinOnly) + global.error("source file for " + c + " not found; it is needed because class is used as a mixin"); + else + global.error("i/o error while loading " + c + ": " + e); c.setInfo(Type.ErrorType); } completed = true; diff --git a/sources/scalac/symtab/Symbol.java b/sources/scalac/symtab/Symbol.java index 37f885bf60..f7430a8402 100644 --- a/sources/scalac/symtab/Symbol.java +++ b/sources/scalac/symtab/Symbol.java @@ -282,6 +282,7 @@ public abstract class Symbol implements Modifiers, Kinds { /** Does this symbol denote a stable value? */ public final boolean isStable() { return kind == VAL && + ((flags & DEF) == 0) && ((flags & STABLE) != 0 || (flags & MUTABLE) == 0 && type().isObjectType()); } @@ -1596,8 +1597,6 @@ public abstract class TypeSymbol extends Symbol { closures = new ClosureIntervalList(closures, Symbol.type(closureClasses), phase.prev == null ? phase : phase.prev); //System.out.println("closure(" + this + ") = " + ArrayApply.toString(closures.closure));//DEBUG - - adjustType(type()); //System.out.println("closure(" + this + ") = " + ArrayApply.toString(closures.closure));//DEBUG Global.instance.currentPhase = current; diff --git a/sources/scalac/symtab/Type.java b/sources/scalac/symtab/Type.java index d7670a4aed..93918f0c54 100644 --- a/sources/scalac/symtab/Type.java +++ b/sources/scalac/symtab/Type.java @@ -827,14 +827,6 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags { * inherited members of this type; return Symbol.NONE if not found. */ public Symbol lookupNonPrivate(Name name) { - return lookupNonPrivate(name, 0); - } - - /** Same as before, but with additional parameter `start'. - * If start == 0, lookup in all basetypes of a compound type. - * If start == 1, lookup only in mixin classes. - */ - private Symbol lookupNonPrivate(Name name, int start) { switch (this) { case ErrorType: return Symbol.ERROR; @@ -843,7 +835,7 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags { case ConstantType(_, _): return singleDeref().lookupNonPrivate(name); case TypeRef(_, Symbol sym, _): - return sym.info().lookupNonPrivate(name, start); + return sym.info().lookupNonPrivate(name); case CompoundType(Type[] parts, Scope members): Symbol sym = members.lookup(name); if (sym.kind != NONE && (sym.flags & PRIVATE) == 0) @@ -853,12 +845,14 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags { // take precedence over abstract ones. int i = parts.length; sym = Symbol.NONE; - while (i > start && (sym.kind == NONE || (sym.flags & DEFERRED) != 0)) { + while (i > 0 && (sym.kind == NONE || (sym.flags & DEFERRED) != 0)) { i--; - Symbol sym1 = parts[i].lookupNonPrivate(name, i == 0 ? 0 : 1); + Symbol sym1 = parts[i].lookupNonPrivate(name); if (sym1.kind != NONE && (sym1.flags & PRIVATE) == 0 && - (sym.kind == NONE || (sym1.flags & DEFERRED) == 0)) + (sym.kind == NONE || + (sym1.flags & DEFERRED) == 0 || + sym1.owner().isSubClass(sym.owner()))) sym = sym1; } return sym; @@ -1198,7 +1192,7 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags { * or `sym' itself if none exists. */ public Symbol rebind(Symbol sym) { - if ((sym.flags & (PRIVATE | MODUL)) == 0) { + if (sym.kind != CLASS && (sym.flags & (PRIVATE | MODUL)) == 0) { Symbol sym1 = lookupNonPrivate(sym.name); if (sym1.kind != NONE) { if ((sym1.flags & LOCKED) != 0) diff --git a/sources/scalac/typechecker/RefCheck.java b/sources/scalac/typechecker/RefCheck.java index 0b9d308e2b..afe0e0df7a 100644 --- a/sources/scalac/typechecker/RefCheck.java +++ b/sources/scalac/typechecker/RefCheck.java @@ -100,6 +100,8 @@ public class RefCheck extends Transformer implements Modifiers, Kinds { } void checkOverride(int pos, Symbol clazz, Symbol other) { + if (other.kind == CLASS) + return; // todo: see if we can sustain this Symbol member = other; if ((other.flags & PRIVATE) == 0) { Symbol member1 = clazz.info().lookup(other.name); @@ -222,8 +224,10 @@ public class RefCheck extends Transformer implements Modifiers, Kinds { overrideError(pos, member, other, "has weaker access privileges; it should not be protected"); } else if ((other.flags & FINAL) != 0) { overrideError(pos, member, other, "cannot override final member"); +/* } else if (other.kind == CLASS) { overrideError(pos, member, other, "cannot override a class"); +*/ } else if ((other.flags & DEFERRED) == 0 && ((member.flags & OVERRIDE) == 0)) { overrideError(pos, member, other, "needs `override' modifier"); } else if (other.isAbstractOverride() && |