diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2012-11-11 14:58:23 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2012-11-11 14:58:23 +0100 |
commit | a5f3af44f04e03d212e6cb31e4ca73e2fca52e29 (patch) | |
tree | f2a704be7faa3d3aaec219e6ec07857bc71c0164 /src/main/scala/scala/async/Async.scala | |
parent | f8646f99648773145baa853c6defdf5554ca0283 (diff) | |
download | scala-async-a5f3af44f04e03d212e6cb31e4ca73e2fca52e29.tar.gz scala-async-a5f3af44f04e03d212e6cb31e4ca73e2fca52e29.tar.bz2 scala-async-a5f3af44f04e03d212e6cb31e4ca73e2fca52e29.zip |
Synthezise a match directly.
Rather than a function applied to the state.
Diffstat (limited to 'src/main/scala/scala/async/Async.scala')
-rw-r--r-- | src/main/scala/scala/async/Async.scala | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/src/main/scala/scala/async/Async.scala b/src/main/scala/scala/async/Async.scala index 2d7f324..ac965b4 100644 --- a/src/main/scala/scala/async/Async.scala +++ b/src/main/scala/scala/async/Async.scala @@ -23,7 +23,7 @@ object Async extends AsyncBase { def async[T](body: T) = macro asyncImpl[T] override def asyncImpl[T: c.WeakTypeTag](c: Context)(body: c.Expr[T]): c.Expr[Future[T]] = super.asyncImpl[T](c)(body) - } +} object AsyncId extends AsyncBase { lazy val futureSystem = IdentityFutureSystem @@ -84,14 +84,12 @@ abstract class AsyncBase { val handlerCases: List[CaseDef] = asyncBlockBuilder.mkCombinedHandlerCases[T]() - val combinedHander = c.Expr[Int => Unit](builder.mkFunction(handlerCases)) - val localVarTrees = asyncBlockBuilder.asyncStates.init.flatMap(_.allVarDefs).toList /* def resume(): Unit = { try { - combinedHander(state) + state match { case 0 => ... ; ... } } catch { case NonFatal(t) => result.failure(t) } @@ -100,10 +98,7 @@ abstract class AsyncBase { val nonFatalModule = builder.defn.NonFatalClass val resumeFunTree: c.Tree = DefDef(Modifiers(), name.resume, Nil, List(Nil), Ident(definitions.UnitClass), Try( - reify { - combinedHander.splice.apply(c.Expr[Int](Ident(name.state)).splice) - }.tree - , + Match(Ident(name.state), handlerCases), List( CaseDef( Apply(Ident(nonFatalModule), List(Bind(name.tr, Ident(nme.WILDCARD)))), |