aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2017-08-10 16:31:53 +1000
committerJason Zaugg <jzaugg@gmail.com>2017-09-27 13:37:59 +1000
commit67b1a6025c88ae55b49ecd8af0948c3f8faa8ab9 (patch)
tree86e2fb5dc035be8d1f2837976804664f38b9787c
parentc09aa7792c226abdd98385d758e9c5620c858d24 (diff)
downloadscala-async-67b1a6025c88ae55b49ecd8af0948c3f8faa8ab9.tar.gz
scala-async-67b1a6025c88ae55b49ecd8af0948c3f8faa8ab9.tar.bz2
scala-async-67b1a6025c88ae55b49ecd8af0948c3f8faa8ab9.zip
Allow future system to enable more name freshening
-rw-r--r--src/main/scala/scala/async/internal/FutureSystem.scala2
-rw-r--r--src/main/scala/scala/async/internal/TransformUtils.scala43
2 files changed, 32 insertions, 13 deletions
diff --git a/src/main/scala/scala/async/internal/FutureSystem.scala b/src/main/scala/scala/async/internal/FutureSystem.scala
index f330cbf..aad5b92 100644
--- a/src/main/scala/scala/async/internal/FutureSystem.scala
+++ b/src/main/scala/scala/async/internal/FutureSystem.scala
@@ -74,6 +74,8 @@ trait FutureSystem {
}
def mkOps(c0: Context): Ops { val c: c0.type }
+
+ def freshenAllNames: Boolean = false
}
object ScalaConcurrentFutureSystem extends FutureSystem {
diff --git a/src/main/scala/scala/async/internal/TransformUtils.scala b/src/main/scala/scala/async/internal/TransformUtils.scala
index c86540b..4c16dd7 100644
--- a/src/main/scala/scala/async/internal/TransformUtils.scala
+++ b/src/main/scala/scala/async/internal/TransformUtils.scala
@@ -17,23 +17,40 @@ private[async] trait TransformUtils {
import c.internal._
import decorators._
+ private object baseNames {
+
+ val matchRes = "matchres"
+ val ifRes = "ifres"
+ val bindSuffix = "$bind"
+ val completed = newTermName("completed")
+
+ val state = newTermName("state")
+ val result = newTermName("result")
+ val execContext = newTermName("execContext")
+ val tr = newTermName("tr")
+ val t = newTermName("throwable")
+ }
+
object name {
- val resume = newTermName("resume")
- val apply = newTermName("apply")
- val matchRes = "matchres"
- val ifRes = "ifres"
- val await = "await"
- val bindSuffix = "$bind"
- val completed = newTermName("completed")
-
- val state = newTermName("state")
- val result = newTermName("result")
- val execContext = newTermName("execContext")
+ def matchRes = maybeFresh(baseNames.matchRes)
+ def ifRes = maybeFresh(baseNames.ifRes)
+ def bindSuffix = maybeFresh(baseNames.bindSuffix)
+ def completed = maybeFresh(baseNames.completed)
+
+ val state = maybeFresh(baseNames.state)
+ val result = maybeFresh(baseNames.result)
+ val execContext = maybeFresh(baseNames.execContext)
+ val tr = maybeFresh(baseNames.tr)
+ val t = maybeFresh(baseNames.t)
+
+ val await = "await"
+ val resume = newTermName("resume")
+ val apply = newTermName("apply")
val stateMachine = newTermName(fresh("stateMachine"))
val stateMachineT = stateMachine.toTypeName
- val tr = newTermName("tr")
- val t = newTermName("throwable")
+ def maybeFresh(name: TermName): TermName = if (self.asyncBase.futureSystem.freshenAllNames) fresh(name) else name
+ def maybeFresh(name: String): String = if (self.asyncBase.futureSystem.freshenAllNames) fresh(name) else name
def fresh(name: TermName): TermName = c.freshName(name)
def fresh(name: String): String = c.freshName(name)