aboutsummaryrefslogtreecommitdiff
path: root/src/async
diff options
context:
space:
mode:
authorphaller <hallerp@gmail.com>2012-10-26 17:43:53 +0200
committerphaller <hallerp@gmail.com>2012-10-26 17:43:53 +0200
commit00a12d8938dad49cf53f2c54bca4a96efdeccd8e (patch)
treed65df9a27b10b5448120cb76a7b1a804c7ac21a0 /src/async
parent0aa0110cdbb303531436d580c7b2c588c7dd1057 (diff)
downloadscala-async-00a12d8938dad49cf53f2c54bca4a96efdeccd8e.tar.gz
scala-async-00a12d8938dad49cf53f2c54bca4a96efdeccd8e.tar.bz2
scala-async-00a12d8938dad49cf53f2c54bca4a96efdeccd8e.zip
Do not use reify for building compound state handlers
Diffstat (limited to 'src/async')
-rw-r--r--src/async/library/scala/async/Async.scala13
1 files changed, 5 insertions, 8 deletions
diff --git a/src/async/library/scala/async/Async.scala b/src/async/library/scala/async/Async.scala
index d6ebc47..5c42a16 100644
--- a/src/async/library/scala/async/Async.scala
+++ b/src/async/library/scala/async/Async.scala
@@ -314,16 +314,13 @@ object Async extends AsyncUtils {
var handlerExpr = c.Expr(handlerTree).asInstanceOf[c.Expr[PartialFunction[Int, Unit]]]
var i = 1
- while (asyncStates(i).isInstanceOf[builder.AsyncStateWithAwait]) {
+ for (asyncState <- asyncStates.tail.init) {
//val handlerForNextState = asyncStates(i).mkHandlerForState(i+1)
- val handlerTreeForNextState = asyncStates(i).mkHandlerTreeForState(i)
-
+ val handlerTreeForNextState = asyncState.mkHandlerTreeForState(i)
val currentHandlerTreeNaked = c.resetAllAttrs(handlerExpr.tree.duplicate)
- handlerExpr = reify {
- //c.Expr(currentHandlerTreeNaked).asInstanceOf[c.Expr[PartialFunction[Int, Unit]]].splice orElse handlerForNextState.splice
- c.Expr(currentHandlerTreeNaked).asInstanceOf[c.Expr[PartialFunction[Int, Unit]]].splice.orElse(
- c.Expr(handlerTreeForNextState).asInstanceOf[c.Expr[PartialFunction[Int, Unit]]].splice)
- }
+ handlerExpr = c.Expr(
+ Apply(Select(currentHandlerTreeNaked, newTermName("orElse")), List(handlerTreeForNextState))
+ ).asInstanceOf[c.Expr[PartialFunction[Int, Unit]]]
i += 1
}
// asyncStates(i) does not end with `await` (asyncStates(i).awaitable == null)