diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2012-11-09 14:29:35 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2012-11-09 15:47:17 +0100 |
commit | 370be9ea41c582f033a2eeef05157e77a5077144 (patch) | |
tree | 6f58e3d93f1289bbef687e7695ce3fcf36e7014b /src/main/scala/scala/async/Async.scala | |
parent | d434c20cfb8623a243cd30f187907bb4b199dc99 (diff) | |
download | scala-async-370be9ea41c582f033a2eeef05157e77a5077144.tar.gz scala-async-370be9ea41c582f033a2eeef05157e77a5077144.tar.bz2 scala-async-370be9ea41c582f033a2eeef05157e77a5077144.zip |
Further cleanup in AST generation
- centralize names
- centralize more module/class lookup
- reduce duplication
- centralize use of resetAllAttrs
- remove uses of asInstanceOf
Diffstat (limited to 'src/main/scala/scala/async/Async.scala')
-rw-r--r-- | src/main/scala/scala/async/Async.scala | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/src/main/scala/scala/async/Async.scala b/src/main/scala/scala/async/Async.scala index d64e04a..acd5128 100644 --- a/src/main/scala/scala/async/Async.scala +++ b/src/main/scala/scala/async/Async.scala @@ -65,13 +65,14 @@ abstract class AsyncBase extends AsyncUtils { @deprecated("`await` must be enclosed in an `async` block", "0.1") def await[T](awaitable: futureSystem.Fut[T]): T = ??? - def asyncImpl[T: c.WeakTypeTag](c: Context)(body: c.Expr[T]) = { + def asyncImpl[T: c.WeakTypeTag](c: Context)(body: c.Expr[T]): c.Expr[futureSystem.Fut[T]] = { import c.universe._ import Flag._ - val builder = new ExprBuilder[c.type, self.FS](c, self.futureSystem) + val builder = new ExprBuilder[c.type, futureSystem.type](c, self.futureSystem) import builder.defn._ + import builder.name import builder.futureSystemOps val awaitMethod = awaitSym(c) @@ -91,7 +92,7 @@ abstract class AsyncBase extends AsyncUtils { val handlerForLastState: c.Expr[PartialFunction[Int, Unit]] = { val lastState = asyncBlockBuilder.asyncStates.last val lastStateBody = c.Expr[T](lastState.body) - builder.mkHandler(lastState.state, futureSystemOps.completeProm(c.Expr[futureSystem.Prom[T]](Ident("result")), reify(scala.util.Success(lastStateBody.splice)))) + builder.mkHandler(lastState.state, futureSystemOps.completeProm(c.Expr[futureSystem.Prom[T]](Ident(name.result)), reify(scala.util.Success(lastStateBody.splice)))) } vprintln("GENERATED handler for last state:") @@ -108,30 +109,31 @@ abstract class AsyncBase extends AsyncUtils { } } */ - val nonFatalModule = c.mirror.staticModule("scala.util.control.NonFatal") - val resumeFunTree: c.Tree = DefDef(Modifiers(), newTermName("resume"), List(), List(List()), Ident(definitions.UnitClass), + val nonFatalModule = builder.defn.NonFatalClass + val resumeFunTree: c.Tree = DefDef(Modifiers(), name.resume, List(), List(List()), Ident(definitions.UnitClass), Try( reify { val combinedHandler = mkPartialFunction_orElse(handlerExpr)(handlerForLastState).splice - combinedHandler.apply(c.Expr[Int](Ident(newTermName("state"))).splice) + combinedHandler.apply(c.Expr[Int](Ident(name.state)).splice) }.tree , List( CaseDef( - Apply(Ident(nonFatalModule), List(Bind(newTermName("t"), Ident(nme.WILDCARD)))), + Apply(Ident(nonFatalModule), List(Bind(name.tr, Ident(nme.WILDCARD)))), EmptyTree, Block(List({ - val t = c.Expr[Throwable](Ident(newTermName("t"))) - futureSystemOps.completeProm[T](c.Expr[futureSystem.Prom[T]](Ident(newTermName("result"))), reify(scala.util.Failure(t.splice))).tree + val t = c.Expr[Throwable](Ident(name.tr)) + futureSystemOps.completeProm[T](c.Expr[futureSystem.Prom[T]](Ident(name.result)), reify(scala.util.Failure(t.splice))).tree }), c.literalUnit.tree))), EmptyTree)) + val prom: Expr[futureSystem.Prom[T]] = reify { val result = futureSystemOps.createProm[T].splice var state = 0 futureSystemOps.future[Unit] { c.Expr[Unit](Block( localVarTrees :+ resumeFunTree, - Apply(Ident(newTermName("resume")), List()))) + Apply(Ident(name.resume), List()))) }(futureSystemOps.execContext).splice result } |