aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/scala/async/ExprBuilder.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2012-11-25 17:55:47 +0100
committerJason Zaugg <jzaugg@gmail.com>2012-11-26 16:18:28 +0100
commitb9bd441662f1235ecd2f80e13030bfcd4f3c4c39 (patch)
tree403a019467f9442863a1e42b114de096f363d722 /src/main/scala/scala/async/ExprBuilder.scala
parente2b840b96a16f7d41dc43c3cf6d905e0db568629 (diff)
downloadscala-async-b9bd441662f1235ecd2f80e13030bfcd4f3c4c39.tar.gz
scala-async-b9bd441662f1235ecd2f80e13030bfcd4f3c4c39.tar.bz2
scala-async-b9bd441662f1235ecd2f80e13030bfcd4f3c4c39.zip
Synthesize an object implementing Function#apply and resume()
There is a fly in the ointment: any This() trees in the provided code are getting rebound to this class. Sounds like more resetAttrs fun ahead. The object also serves as the Future {} thunk.
Diffstat (limited to 'src/main/scala/scala/async/ExprBuilder.scala')
-rw-r--r--src/main/scala/scala/async/ExprBuilder.scala14
1 files changed, 5 insertions, 9 deletions
diff --git a/src/main/scala/scala/async/ExprBuilder.scala b/src/main/scala/scala/async/ExprBuilder.scala
index f8065f2..0655314 100644
--- a/src/main/scala/scala/async/ExprBuilder.scala
+++ b/src/main/scala/scala/async/ExprBuilder.scala
@@ -70,7 +70,7 @@ private[async] final case class ExprBuilder[C <: Context, FS <: FutureSystem](c:
override def mkHandlerCaseForState: CaseDef = {
val callOnComplete = futureSystemOps.onComplete(c.Expr(awaitable.expr),
- c.Expr(Ident(name.onCompleteHandler)), c.Expr(Ident(name.execContext))).tree
+ c.Expr(This(tpnme.EMPTY)), c.Expr(Ident(name.execContext))).tree
mkHandlerCase(state, stats :+ callOnComplete)
}
@@ -310,20 +310,16 @@ private[async] final case class ExprBuilder[C <: Context, FS <: FutureSystem](c:
val initStates = asyncStates.init
/**
- * lazy val onCompleteHandler = (tr: Try[Any]) => state match {
+ * // assumes tr: Try[Any] is in scope.
+ * //
+ * state match {
* case 0 => {
* x11 = tr.get.asInstanceOf[Double];
* state = 1;
* resume()
* }
*/
- val onCompleteHandler: Tree = {
- val onCompleteHandlers = initStates.flatMap(_.mkOnCompleteHandler).toList
- Function(
- List(ValDef(Modifiers(Flag.PARAM), name.tr, TypeTree(defn.TryAnyType), EmptyTree)),
- Match(Ident(name.state), onCompleteHandlers))
- }
-
+ val onCompleteHandler: Tree = Match(Ident(name.state), initStates.flatMap(_.mkOnCompleteHandler).toList)
/**
* def resume(): Unit = {
* try {