diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2012-11-25 17:55:47 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2012-11-26 16:18:28 +0100 |
commit | b9bd441662f1235ecd2f80e13030bfcd4f3c4c39 (patch) | |
tree | 403a019467f9442863a1e42b114de096f363d722 /src/main/scala/scala/async/ExprBuilder.scala | |
parent | e2b840b96a16f7d41dc43c3cf6d905e0db568629 (diff) | |
download | scala-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.scala | 14 |
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 { |