summaryrefslogtreecommitdiff
path: root/sources/scalac
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2004-01-05 11:38:11 +0000
committerMartin Odersky <odersky@gmail.com>2004-01-05 11:38:11 +0000
commit0adfc8d42abed2b4019a866672c497eb5d67e5b9 (patch)
tree11c3b94a1d6df352d313d0496275cd0dc7db23df /sources/scalac
parent3b1253891b888c191e9b96d566b3eb304213eeee (diff)
downloadscala-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.java5
-rw-r--r--sources/scalac/symtab/Symbol.java3
-rw-r--r--sources/scalac/symtab/Type.java20
-rw-r--r--sources/scalac/typechecker/RefCheck.java4
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() &&