aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/scala/async/Async.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2012-11-11 14:58:23 +0100
committerJason Zaugg <jzaugg@gmail.com>2012-11-11 14:58:23 +0100
commita5f3af44f04e03d212e6cb31e4ca73e2fca52e29 (patch)
treef2a704be7faa3d3aaec219e6ec07857bc71c0164 /src/main/scala/scala/async/Async.scala
parentf8646f99648773145baa853c6defdf5554ca0283 (diff)
downloadscala-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.scala11
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)))),