summaryrefslogtreecommitdiff
path: root/sources/scala/tools/nsc/transform/Mixin.scala
diff options
context:
space:
mode:
Diffstat (limited to 'sources/scala/tools/nsc/transform/Mixin.scala')
-rwxr-xr-xsources/scala/tools/nsc/transform/Mixin.scala8
1 files changed, 5 insertions, 3 deletions
diff --git a/sources/scala/tools/nsc/transform/Mixin.scala b/sources/scala/tools/nsc/transform/Mixin.scala
index 6fecdedcba..a0eccb0e64 100755
--- a/sources/scala/tools/nsc/transform/Mixin.scala
+++ b/sources/scala/tools/nsc/transform/Mixin.scala
@@ -25,7 +25,8 @@ abstract class Mixin extends InfoTransform {
private def isStatic(sym: Symbol) = isForwarded(sym) && (sym.hasFlag(PRIVATE) || sym.isConstructor);
- private def toInterface(tp: Type): Type = tp.symbol.toInterface.tpe;
+ private def toInterface(tp: Type): Type =
+ atPhase(currentRun.mixinPhase)(tp.symbol.toInterface).tpe;
private def rebindSuper(base: Symbol, member: Symbol, prevowner: Symbol): Symbol =
atPhase(currentRun.refchecksPhase) {
@@ -80,6 +81,7 @@ abstract class Mixin extends InfoTransform {
}
} else if ((member hasFlag (LIFTED | BRIDGE)) && !(member hasFlag PRIVATE)) {
member.expandName(clazz);
+ if (settings.debug.value) log("adding " + member + " to " + clazz);
addMember(clazz, member.cloneSymbol(clazz));
}
}
@@ -346,8 +348,8 @@ abstract class Mixin extends InfoTransform {
case Select(qual, name) if sym.owner.isImplClass && !isStatic(sym) =>
if (sym.isMethod) {
assert(sym hasFlag (LIFTED | BRIDGE), sym);
- val sym1 = enclInterface.info.decl(sym.name);
- assert(sym1 != NoSymbol, sym);
+ val sym1 = toInterface(qual.tpe).member(sym.name);
+ assert(sym1 != NoSymbol, "" + sym + " " + toInterface(qual.tpe));//debug
assert(!(sym1 hasFlag OVERLOADED), sym);//debug
tree setSymbol sym1
} else {