aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2014-02-15 00:23:43 +0100
committerEugene Burmako <xeno.by@gmail.com>2014-02-15 13:05:58 +0100
commit69f3a4d5ff895e26500196a51ad4c12c873a9b4b (patch)
tree7e606f68f4fba2f53b156fed8d8c92ca364bac50 /src
parenta14d758509f84eed6425f805bacff7c281726ff7 (diff)
downloadscala-async-69f3a4d5ff895e26500196a51ad4c12c873a9b4b.tar.gz
scala-async-69f3a4d5ff895e26500196a51ad4c12c873a9b4b.tar.bz2
scala-async-69f3a4d5ff895e26500196a51ad4c12c873a9b4b.zip
migrates transformAt to typingTransform
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/scala/async/internal/AsyncTransform.scala16
-rw-r--r--src/main/scala/scala/async/internal/TransformUtils.scala14
2 files changed, 13 insertions, 17 deletions
diff --git a/src/main/scala/scala/async/internal/AsyncTransform.scala b/src/main/scala/scala/async/internal/AsyncTransform.scala
index 529ccd2..c9f4103 100644
--- a/src/main/scala/scala/async/internal/AsyncTransform.scala
+++ b/src/main/scala/scala/async/internal/AsyncTransform.scala
@@ -187,32 +187,32 @@ trait AsyncTransform {
val treeSubst = tree
/* Fixes up DefDef: use lifted fields in `body` */
- def fixup(dd: DefDef, body: Tree, ctx: analyzer.Context): Tree = {
+ def fixup(dd: DefDef, body: Tree, api: TypingTransformApi): Tree = {
val spliceeAnfFixedOwnerSyms = body
val useField = new UseFields()
val newRhs = useField.atOwner(dd.symbol)(useField.transform(spliceeAnfFixedOwnerSyms))
- val typer = global.analyzer.newTyper(ctx.make(dd, dd.symbol))
- treeCopy.DefDef(dd, dd.mods, dd.name, dd.tparams, dd.vparamss, dd.tpt, typer.typed(newRhs))
+ val newRhsTyped = api.atOwner(dd, dd.symbol)(api.typecheck(newRhs))
+ treeCopy.DefDef(dd, dd.mods, dd.name, dd.tparams, dd.vparamss, dd.tpt, newRhsTyped)
}
liftablesUseFields.foreach(t => if (t.symbol != null) stateMachineClass.info.decls.enter(t.symbol))
val result0 = transformAt(treeSubst) {
case t@Template(parents, self, stats) =>
- (ctx: analyzer.Context) => {
+ (api: TypingTransformApi) => {
treeCopy.Template(t, parents, self, liftablesUseFields ++ stats)
}
}
val result = transformAt(result0) {
case dd@DefDef(_, name.apply, _, List(List(_)), _, _) if dd.symbol.owner == stateMachineClass =>
- (ctx: analyzer.Context) =>
- val typedTree = fixup(dd, applyBody.changeOwner(enclosingOwner, dd.symbol), ctx)
+ (api: TypingTransformApi) =>
+ val typedTree = fixup(dd, applyBody.changeOwner(enclosingOwner, dd.symbol), api)
typedTree
case dd@DefDef(_, name.resume, _, _, _, _) if dd.symbol.owner == stateMachineClass =>
- (ctx: analyzer.Context) =>
+ (api: TypingTransformApi) =>
val changed = resumeBody.changeOwner(enclosingOwner, dd.symbol)
- val res = fixup(dd, changed, ctx)
+ val res = fixup(dd, changed, api)
res
}
result
diff --git a/src/main/scala/scala/async/internal/TransformUtils.scala b/src/main/scala/scala/async/internal/TransformUtils.scala
index 7602905..18e994f 100644
--- a/src/main/scala/scala/async/internal/TransformUtils.scala
+++ b/src/main/scala/scala/async/internal/TransformUtils.scala
@@ -215,15 +215,11 @@ private[async] trait TransformUtils {
localTyper = global.analyzer.newTyper(callSiteTyper.context.make(unit = callSiteTyper.context.unit))
}
- def transformAt(tree: Tree)(f: PartialFunction[Tree, (analyzer.Context => Tree)]) = {
- object trans extends MacroTypingTransformer {
- override def transform(tree: Tree): Tree = {
- if (f.isDefinedAt(tree)) {
- f(tree)(localTyper.context)
- } else super.transform(tree)
- }
- }
- trans.transform(tree)
+ def transformAt(tree: Tree)(f: PartialFunction[Tree, (TypingTransformApi => Tree)]) = {
+ typingTransform(tree)((tree, api) => {
+ if (f.isDefinedAt(tree)) f(tree)(api)
+ else api.default(tree)
+ })
}
def toMultiMap[A, B](as: Iterable[(A, B)]): Map[A, List[B]] =