diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2012-11-24 12:38:37 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2012-11-24 12:38:37 +0100 |
commit | dac1d9497a1521be937afa8f09dbdee2f2280f8b (patch) | |
tree | cf82d274616d21614ddfd2d0e204aa16366b3738 /src/main/scala/scala/async/TransformUtils.scala | |
parent | d301bea1ca478652ae86397ee3655bc6e4332589 (diff) | |
download | scala-async-dac1d9497a1521be937afa8f09dbdee2f2280f8b.tar.gz scala-async-dac1d9497a1521be937afa8f09dbdee2f2280f8b.tar.bz2 scala-async-dac1d9497a1521be937afa8f09dbdee2f2280f8b.zip |
Refactor name substitution out of ExprBuilder.
Diffstat (limited to 'src/main/scala/scala/async/TransformUtils.scala')
-rw-r--r-- | src/main/scala/scala/async/TransformUtils.scala | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/main/scala/scala/async/TransformUtils.scala b/src/main/scala/scala/async/TransformUtils.scala index b7bb2ce..03709ab 100644 --- a/src/main/scala/scala/async/TransformUtils.scala +++ b/src/main/scala/scala/async/TransformUtils.scala @@ -49,6 +49,19 @@ private[async] final case class TransformUtils[C <: Context](val c: C) { def isAwait(fun: Tree) = fun.symbol == defn.Async_await + /** Replace all `Ident` nodes referring to one of the keys n `renameMap` with a node + * referring to the corresponding new name + */ + def substituteNames(tree: Tree, renameMap: Map[Symbol, Name]): Tree = { + val renamer = new Transformer { + override def transform(tree: Tree) = tree match { + case Ident(_) => (renameMap get tree.symbol).fold(tree)(Ident(_)) + case _ => super.transform(tree) + } + } + renamer.transform(tree) + } + /** Descends into the regions of the tree that are subject to the * translation to a state machine by `async`. When a nested template, * function, or by-name argument is encountered, the descend stops, |