From 6d4a913e0fe41ee3742a52f5848003e03c61d9b0 Mon Sep 17 00:00:00 2001 From: paltherr Date: Tue, 22 Jul 2003 12:28:51 +0000 Subject: - Added a missing cast in AddInterfaces - Moved cast insertion code from ExpandMixins to AddInterfaces Refined - cast insertion test --- sources/scalac/transformer/AddInterfaces.java | 26 +++++++++++++++++++++++--- sources/scalac/transformer/ExpandMixins.java | 27 +-------------------------- 2 files changed, 24 insertions(+), 29 deletions(-) (limited to 'sources') diff --git a/sources/scalac/transformer/AddInterfaces.java b/sources/scalac/transformer/AddInterfaces.java index 71b159faf7..f2916e1d27 100644 --- a/sources/scalac/transformer/AddInterfaces.java +++ b/sources/scalac/transformer/AddInterfaces.java @@ -172,12 +172,32 @@ class AddInterfaces extends Transformer { // constructor, use the class constructor instead. Symbol clsSym = sym.primaryConstructorClass(); if (phase.needInterface(clsSym)) - return gen.Select(qualifier, + return gen.Select(transform(qualifier), phase.getClassSymbol(clsSym).constructor()); else return super.transform(tree); - } else - return super.transform(tree); + } else { + qualifier = transform(qualifier); + Symbol owner = sym.owner(); + if (owner.isClass() + && owner.isJava() && !owner.isInterface() + && owner != defs.ANY_CLASS + && owner != defs.ANYREF_CLASS + && owner != defs.JAVA_OBJECT_CLASS) { + Type qualifierType = qualifier.type().bound(); + if (phase.needInterface(qualifierType.symbol())) { + Type castType = qualifierType.baseType(owner); + qualifier = + gen.Apply( + gen.TypeApply( + gen.Select(qualifier, defs.AS), + new Tree[] { + gen.mkType(tree.pos, castType)}), + Tree.EMPTY_ARRAY); + } + } + return copy.Select(tree, sym, qualifier); + } } case Ident(_): { diff --git a/sources/scalac/transformer/ExpandMixins.java b/sources/scalac/transformer/ExpandMixins.java index 71b2ba60c0..2ff3d357a3 100644 --- a/sources/scalac/transformer/ExpandMixins.java +++ b/sources/scalac/transformer/ExpandMixins.java @@ -290,32 +290,7 @@ public class ExpandMixins extends Transformer { } default: - Tree newTree = super.transform(tree); - - switch (newTree) { - case Apply(Select(Tree qualifier, _), Tree[] args): { - Tree fun = ((Tree.Apply)newTree).fun; - Symbol funOwnerSym = fun.symbol().owner(); - Symbol qualSym = qualifier.type.widen().symbol().moduleClass(); - if (! (qualifier instanceof Tree.Super - || qualSym.isSubClass(funOwnerSym))) { - global.log("inserting cast from " + qualSym + " to " + funOwnerSym);//debug - Type ownerTp = funOwnerSym.type(); - Tree castQualifier = - gen.Apply(gen.TypeApply(gen.Select(qualifier, defs.AS), - new Tree[] { - gen.mkType(qualifier.pos, ownerTp) - }), - Tree.EMPTY_ARRAY); - return copy.Apply(newTree, - copy.Select(fun, castQualifier), - args); - } else - return newTree; - } - default: - return newTree; - } + return super.transform(tree); } } -- cgit v1.2.3