aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/scala/async/internal/AsyncMacro.scala
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2013-10-19 12:45:00 +0200
committerPhilipp Haller <hallerp@gmail.com>2013-10-22 14:41:37 +0200
commit62f22d41cfabc7d0d87c5afef64c1c9015e2cf5e (patch)
treeb26f16fddb9ffc1dd002baa36ba8292e2418dc16 /src/main/scala/scala/async/internal/AsyncMacro.scala
parent480fffd487d53cfdb943a2287788af2bad409b88 (diff)
downloadscala-async-62f22d41cfabc7d0d87c5afef64c1c9015e2cf5e.tar.gz
scala-async-62f22d41cfabc7d0d87c5afef64c1c9015e2cf5e.tar.bz2
scala-async-62f22d41cfabc7d0d87c5afef64c1c9015e2cf5e.zip
Enables testing the resetting of lifted local variables
- Adds a hook that lets a derived macro insert additional code when zero-ing out a lifted field. - Adds a variant of the `AsyncId` macro that logs zeroed-out fields. - Adds a test using this mechanism
Diffstat (limited to 'src/main/scala/scala/async/internal/AsyncMacro.scala')
-rw-r--r--src/main/scala/scala/async/internal/AsyncMacro.scala13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/main/scala/scala/async/internal/AsyncMacro.scala b/src/main/scala/scala/async/internal/AsyncMacro.scala
index 1c97ca7..ee49923 100644
--- a/src/main/scala/scala/async/internal/AsyncMacro.scala
+++ b/src/main/scala/scala/async/internal/AsyncMacro.scala
@@ -4,15 +4,18 @@ import scala.tools.nsc.Global
import scala.tools.nsc.transform.TypingTransformers
object AsyncMacro {
- def apply(c: reflect.macros.Context, futureSystem0: FutureSystem): AsyncMacro = {
+ def apply(c: reflect.macros.Context, base: AsyncBase): AsyncMacro = {
import language.reflectiveCalls
val powerContext = c.asInstanceOf[c.type { val universe: Global; val callsiteTyper: universe.analyzer.Typer }]
new AsyncMacro {
- val global: powerContext.universe.type = powerContext.universe
+ val global: powerContext.universe.type = powerContext.universe
val callSiteTyper: global.analyzer.Typer = powerContext.callsiteTyper
- val futureSystem: futureSystem0.type = futureSystem0
- val futureSystemOps: futureSystem.Ops {val universe: global.type} = futureSystem0.mkOps(global)
- val macroApplication: global.Tree = c.macroApplication.asInstanceOf[global.Tree]
+ val macroApplication: global.Tree = c.macroApplication.asInstanceOf[global.Tree]
+ // This member is required by `AsyncTransform`:
+ val asyncBase: AsyncBase = base
+ // These members are required by `ExprBuilder`:
+ val futureSystem: FutureSystem = base.futureSystem
+ val futureSystemOps: futureSystem.Ops {val universe: global.type} = futureSystem.mkOps(global)
}
}
}