From defca0c9132a1e1e98e3363d8b7784898e2b982e Mon Sep 17 00:00:00 2001 From: Eugene Burmako Date: Sat, 15 Feb 2014 00:02:53 +0100 Subject: gets rid of home-grown changeOwner --- .../scala/scala/async/internal/AnfTransform.scala | 6 +++--- .../scala/scala/async/internal/AsyncTransform.scala | 15 +++++++-------- .../scala/scala/async/internal/TransformUtils.scala | 19 +------------------ 3 files changed, 11 insertions(+), 29 deletions(-) (limited to 'src') diff --git a/src/main/scala/scala/async/internal/AnfTransform.scala b/src/main/scala/scala/async/internal/AnfTransform.scala index c0a5181..9dbbe69 100644 --- a/src/main/scala/scala/async/internal/AnfTransform.scala +++ b/src/main/scala/scala/async/internal/AnfTransform.scala @@ -152,8 +152,8 @@ private[async] trait AnfTransform { private def defineVal(prefix: String, lhs: Tree, pos: Position): ValDef = { val sym = currOwner.newTermSymbol(name.fresh(prefix), pos, SYNTHETIC).setInfo(uncheckedBounds(lhs.tpe)) - changeOwner(lhs, currentOwner, sym) - ValDef(sym, changeOwner(lhs, currentOwner, sym)).setType(NoType).setPos(pos) + lhs.changeOwner(currentOwner, sym) + ValDef(sym, lhs.changeOwner(currentOwner, sym)).setType(NoType).setPos(pos) } private object anf { @@ -236,7 +236,7 @@ private[async] trait AnfTransform { case ValDef(mods, name, tpt, rhs) => if (rhs exists isAwait) { val stats :+ expr = atOwner(currOwner.owner)(linearize.transformToList(rhs)) - stats.foreach(changeOwner(_, currOwner, currOwner.owner)) + stats.foreach(_.changeOwner(currOwner, currOwner.owner)) stats :+ treeCopy.ValDef(tree, mods, name, tpt, expr) } else List(tree) diff --git a/src/main/scala/scala/async/internal/AsyncTransform.scala b/src/main/scala/scala/async/internal/AsyncTransform.scala index a3b8d14..529ccd2 100644 --- a/src/main/scala/scala/async/internal/AsyncTransform.scala +++ b/src/main/scala/scala/async/internal/AsyncTransform.scala @@ -3,7 +3,9 @@ package scala.async.internal trait AsyncTransform { self: AsyncMacro => - import c.universe._ + import c.universe.{gen => _, _} + import c.internal._ + import decorators._ val asyncBase: AsyncBase @@ -158,7 +160,7 @@ trait AsyncTransform { atOwner(currentOwner) { val fieldSym = tree.symbol val set = Assign(gen.mkAttributedStableRef(fieldSym.owner.thisType, fieldSym), transform(rhs)) - changeOwner(set, tree.symbol, currentOwner) + set.changeOwner(tree.symbol, currentOwner) localTyper.typedPos(tree.pos)(set) } case _: DefTree if liftedSyms(tree.symbol) => @@ -181,10 +183,7 @@ trait AsyncTransform { useField.atOwner(stateMachineClass)(useField.transform(x)) } - tree.children.foreach { - t => - new ChangeOwnerAndModuleClassTraverser(callSiteTyper.context.owner, tree.symbol).traverse(t) - } + tree.children.foreach(_.changeOwner(enclosingOwner, tree.symbol)) val treeSubst = tree /* Fixes up DefDef: use lifted fields in `body` */ @@ -207,12 +206,12 @@ trait AsyncTransform { val result = transformAt(result0) { case dd@DefDef(_, name.apply, _, List(List(_)), _, _) if dd.symbol.owner == stateMachineClass => (ctx: analyzer.Context) => - val typedTree = fixup(dd, changeOwner(applyBody, callSiteTyper.context.owner, dd.symbol), ctx) + val typedTree = fixup(dd, applyBody.changeOwner(enclosingOwner, dd.symbol), ctx) typedTree case dd@DefDef(_, name.resume, _, _, _, _) if dd.symbol.owner == stateMachineClass => (ctx: analyzer.Context) => - val changed = changeOwner(resumeBody, callSiteTyper.context.owner, dd.symbol) + val changed = resumeBody.changeOwner(enclosingOwner, dd.symbol) val res = fixup(dd, changed, ctx) res } diff --git a/src/main/scala/scala/async/internal/TransformUtils.scala b/src/main/scala/scala/async/internal/TransformUtils.scala index eb48d4f..c3b4397 100644 --- a/src/main/scala/scala/async/internal/TransformUtils.scala +++ b/src/main/scala/scala/async/internal/TransformUtils.scala @@ -206,7 +206,7 @@ private[async] trait TransformUtils { } abstract class MacroTypingTransformer extends TypingTransformer(callSiteTyper.context.unit) { - currentOwner = callSiteTyper.context.owner + currentOwner = enclosingOwner curTree = EmptyTree def currOwner: Symbol = currentOwner @@ -225,23 +225,6 @@ private[async] trait TransformUtils { trans.transform(tree) } - def changeOwner(tree: Tree, oldOwner: Symbol, newOwner: Symbol): tree.type = { - new ChangeOwnerAndModuleClassTraverser(oldOwner, newOwner).traverse(tree) - tree - } - - class ChangeOwnerAndModuleClassTraverser(oldowner: Symbol, newowner: Symbol) - extends ChangeOwnerTraverser(oldowner, newowner) { - - override def traverse(tree: Tree) { - tree match { - case _: DefTree => change(tree.symbol.moduleClass) - case _ => - } - super.traverse(tree) - } - } - def toMultiMap[A, B](as: Iterable[(A, B)]): Map[A, List[B]] = as.toList.groupBy(_._1).mapValues(_.map(_._2).toList).toMap -- cgit v1.2.3