From 67b1a6025c88ae55b49ecd8af0948c3f8faa8ab9 Mon Sep 17 00:00:00 2001 From: Jason Zaugg Date: Thu, 10 Aug 2017 16:31:53 +1000 Subject: Allow future system to enable more name freshening --- .../scala/scala/async/internal/FutureSystem.scala | 2 + .../scala/async/internal/TransformUtils.scala | 43 +++++++++++++++------- 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) -- cgit v1.2.3