summaryrefslogtreecommitdiff
path: root/sources/scalac/symtab
diff options
context:
space:
mode:
Diffstat (limited to 'sources/scalac/symtab')
-rw-r--r--sources/scalac/symtab/Symbol.java10
-rw-r--r--sources/scalac/symtab/Type.java5
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])