aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2014-02-15 00:02:53 +0100
committerEugene Burmako <xeno.by@gmail.com>2014-02-15 13:05:58 +0100
commitdefca0c9132a1e1e98e3363d8b7784898e2b982e (patch)
tree622e7d88c3d733ee42926cd7cd70de2a520faf51 /src
parentfd98325cd1fc2645211fbe0d117b90d32dee24fc (diff)
downloadscala-async-defca0c9132a1e1e98e3363d8b7784898e2b982e.tar.gz
scala-async-defca0c9132a1e1e98e3363d8b7784898e2b982e.tar.bz2
scala-async-defca0c9132a1e1e98e3363d8b7784898e2b982e.zip
gets rid of home-grown changeOwner
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/scala/async/internal/AnfTransform.scala6
-rw-r--r--src/main/scala/scala/async/internal/AsyncTransform.scala15
-rw-r--r--src/main/scala/scala/async/internal/TransformUtils.scala19
3 files changed, 11 insertions, 29 deletions
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