From 4dff47967466f90091bc48f06b86c003100e3c4c Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Wed, 5 Oct 2005 15:36:27 +0000 Subject: *** empty log message *** --- sources/scala/tools/nsc/transform/Flatten.scala | 3 ++- sources/scala/tools/nsc/transform/Mixin.scala | 9 +++++---- sources/scala/tools/nsc/typechecker/Namers.scala | 2 +- sources/scala/tools/nsc/typechecker/TreeCheckers.scala | 2 +- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/sources/scala/tools/nsc/transform/Flatten.scala b/sources/scala/tools/nsc/transform/Flatten.scala index b8e7db3e5f..8b03000a4f 100755 --- a/sources/scala/tools/nsc/transform/Flatten.scala +++ b/sources/scala/tools/nsc/transform/Flatten.scala @@ -47,7 +47,8 @@ abstract class Flatten extends InfoTransform { parents1 = List.mapConserve(parents)(this); for (val sym <- decls.toList) { if (sym.isTerm && !sym.isStaticModule) { - decls1 enter sym + decls1 enter sym; + if (sym.isModule) sym.moduleClass setFlag LIFTED; } else if (sym.isClass) { liftClass(sym); if (sym.needsImplClass) liftClass(erasure.implClass(sym)) diff --git a/sources/scala/tools/nsc/transform/Mixin.scala b/sources/scala/tools/nsc/transform/Mixin.scala index 7b6a1ed71f..e8a57d2e05 100755 --- a/sources/scala/tools/nsc/transform/Mixin.scala +++ b/sources/scala/tools/nsc/transform/Mixin.scala @@ -101,7 +101,7 @@ abstract class Mixin extends InfoTransform { for (val member <- bc.info.decls.toList) { if (isForwarded(member) && !isStatic(member) && (clazz.info.member(member.name).alternatives contains member)) { - val member1 = addMember(clazz, member.cloneSymbol(clazz) setFlag MIXEDIN); + val member1 = addMember(clazz, member.cloneSymbol(clazz) setFlag MIXEDIN resetFlag DEFERRED); member1.asInstanceOf[TermSymbol] setAlias member; } } @@ -177,14 +177,15 @@ abstract class Mixin extends InfoTransform { class MixinTransformer extends Transformer { private var self: Symbol = _; - private var localTyper: analyzer.Typer = _; + private val rootContext = erasure.NoContext.make(EmptyTree, RootClass, new Scope()); + private var localTyper: erasure.Typer = _; private var enclInterface: Symbol = _; private def preTransform(tree: Tree): Tree = { val sym = tree.symbol; tree match { case Template(parents, body) => - localTyper = typer.atOwner(tree, currentOwner); + localTyper = erasure.newTyper(rootContext.make(tree, currentOwner)); atPhase(phase.next)(currentOwner.owner.info);//needed? if (!currentOwner.isTrait) addMixedinMembers(currentOwner) else if (currentOwner hasFlag lateINTERFACE) addLateInterfaceMembers(currentOwner); @@ -249,7 +250,7 @@ abstract class Mixin extends InfoTransform { Apply(Select(Super(clazz, nme.EMPTY.toTypeName), stat.symbol.alias), vparams map (vparam => Ident(vparam.symbol))); if (settings.debug.value) log("complete super acc " + stat.symbol + stat.symbol.locationString + " " + rhs0 + " " + stat.symbol.alias + stat.symbol.alias.locationString);//debug - val rhs1 = postTransform(localTyper.typed(atPos(stat.pos)(rhs0))); + val rhs1 = postTransform(localTyper.typed(atPos(stat.pos)(rhs0), stat.symbol.tpe.resultType)); copy.DefDef(stat, mods, name, tparams, List(vparams), tpt, rhs1) case _ => stat diff --git a/sources/scala/tools/nsc/typechecker/Namers.scala b/sources/scala/tools/nsc/typechecker/Namers.scala index 11944187aa..f55a201a7b 100755 --- a/sources/scala/tools/nsc/typechecker/Namers.scala +++ b/sources/scala/tools/nsc/typechecker/Namers.scala @@ -20,7 +20,7 @@ trait Namers: Analyzer { sym.reset(NoType); sym setPos pos; sym.flags = mods | lockedFlag; - if (sym.isModule) + if (sym.isModule && sym.moduleClass != NoSymbol) updatePosFlags(sym.moduleClass, pos, (mods & ModuleToClassFlags) | MODULE | FINAL); if (sym.owner.isPackageClass && sym.linkedSym.rawInfo.isInstanceOf[loaders.SymbolLoader]) // pre-set linked symbol to NoType, in case it is not loaded together with this symbol. diff --git a/sources/scala/tools/nsc/typechecker/TreeCheckers.scala b/sources/scala/tools/nsc/typechecker/TreeCheckers.scala index e2bb54384f..84882c26c1 100644 --- a/sources/scala/tools/nsc/typechecker/TreeCheckers.scala +++ b/sources/scala/tools/nsc/typechecker/TreeCheckers.scala @@ -49,7 +49,7 @@ abstract class TreeCheckers extends Analyzer { tree.tpe = null } val newtree = super.typed(tree, mode, pt); - if (newtree ne tree) + if ((newtree ne tree) && !newtree.isInstanceOf[Literal]) error(tree.pos, "trees differ\n old: " + tree + " [" + tree.getClass() + "]\n new: " + newtree + " [" + newtree.getClass() + "]"); } -- cgit v1.2.3