diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2013-11-13 17:52:22 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2013-11-13 17:52:22 +0100 |
commit | 2eba82f8b7687dd898b89496451ebb3ae9519692 (patch) | |
tree | 02741b443294cd48300075263451e63e0cb513b7 /src | |
parent | 5ed6a1da1ce8ee073285c8fe1ab63560ce0b6843 (diff) | |
download | scala-async-2eba82f8b7687dd898b89496451ebb3ae9519692.tar.gz scala-async-2eba82f8b7687dd898b89496451ebb3ae9519692.tar.bz2 scala-async-2eba82f8b7687dd898b89496451ebb3ae9519692.zip |
Add a hook for post-ANF transformation
For use by custom implementations of the async macro.
Diffstat (limited to 'src')
-rw-r--r-- | src/main/scala/scala/async/internal/AsyncTransform.scala | 4 | ||||
-rw-r--r-- | src/main/scala/scala/async/internal/FutureSystem.scala | 3 |
2 files changed, 6 insertions, 1 deletions
diff --git a/src/main/scala/scala/async/internal/AsyncTransform.scala b/src/main/scala/scala/async/internal/AsyncTransform.scala index 9003b0b..043822b 100644 --- a/src/main/scala/scala/async/internal/AsyncTransform.scala +++ b/src/main/scala/scala/async/internal/AsyncTransform.scala @@ -20,7 +20,9 @@ trait AsyncTransform { // Transform to A-normal form: // - no await calls in qualifiers or arguments, // - if/match only used in statement position. - val anfTree: Block = anfTransform(body) + val anfTree0: Block = anfTransform(body) + + val anfTree = futureSystemOps.postAnfTransform(anfTree0) val resumeFunTreeDummyBody = DefDef(Modifiers(), name.resume, Nil, List(Nil), Ident(definitions.UnitClass), Literal(Constant(()))) diff --git a/src/main/scala/scala/async/internal/FutureSystem.scala b/src/main/scala/scala/async/internal/FutureSystem.scala index 9fe88b4..c064474 100644 --- a/src/main/scala/scala/async/internal/FutureSystem.scala +++ b/src/main/scala/scala/async/internal/FutureSystem.scala @@ -51,6 +51,9 @@ trait FutureSystem { def spawn(tree: Tree, execContext: Tree): Tree = future(Expr[Unit](tree))(Expr[ExecContext](execContext)).tree + + /** A hook for custom macros to transform the tree post-ANF transform */ + def postAnfTransform(tree: Block): Block = tree } def mkOps(c: SymbolTable): Ops { val universe: c.type } |