diff options
Diffstat (limited to 'sources/scalac/symtab')
-rw-r--r-- | sources/scalac/symtab/Symbol.java | 10 | ||||
-rw-r--r-- | sources/scalac/symtab/Type.java | 5 |
2 files changed, 11 insertions, 4 deletions
diff --git a/sources/scalac/symtab/Symbol.java b/sources/scalac/symtab/Symbol.java index f69506fc6d..7ab12576da 100644 --- a/sources/scalac/symtab/Symbol.java +++ b/sources/scalac/symtab/Symbol.java @@ -195,8 +195,14 @@ public abstract class Symbol implements Modifiers, Kinds { if (infos.limit < 0) return false; switch (rawInfo()) { case MethodType(_, _): - case PolyType(_, _): return true; - default: return false; + case PolyType(_, _): + return true; + case OverloadedType(Symbol[] alts, _): + for (int i = 0; i < alts.length; i++) + if (alts[i].isMethod()) return true; + return false; + default: + return false; } } diff --git a/sources/scalac/symtab/Type.java b/sources/scalac/symtab/Type.java index 7fa877dc82..36e7431fdf 100644 --- a/sources/scalac/symtab/Type.java +++ b/sources/scalac/symtab/Type.java @@ -1320,7 +1320,7 @@ public class Type implements Modifiers, Kinds, TypeTags { if (!isSubType(alttypes1[i])) return false; } - break; + return true; case UnboxedType(int tag1): switch (this) { @@ -1948,13 +1948,14 @@ public class Type implements Modifiers, Kinds, TypeTags { e = e.next) { Name name = e.sym.name; if ((e.sym.flags & PRIVATE) == 0 && lubType.lookup(name) == e.sym) { - //todo: not info? Type symType = memberTp(lubThisType, e.sym); Type symLoBound = lubThisType.memberLoBound(e.sym); int j = 0; while (j < tps.length) { rsyms[j] = tps[j].lookupNonPrivate(name); if (rsyms[j] == e.sym) break; + if (rsyms[j].isMethod()) break; // since methods cannot + // appear in refinements. rtps[j] = memberTp(tps[j], rsyms[j]) .substThis(tps[j].symbol(), lubThisType); rlbs[j] = tps[j].memberLoBound(rsyms[j]) |