aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/scala/async/TransformUtils.scala
diff options
context:
space:
mode:
authorphaller <hallerp@gmail.com>2012-11-26 17:28:51 +0100
committerphaller <hallerp@gmail.com>2012-11-26 23:26:16 +0100
commit9ea2cc44e98c110843780aef09c7d1a695458be3 (patch)
tree3b7eb7ad3c8e6b983675a020d1f4fe7edb72bdca /src/main/scala/scala/async/TransformUtils.scala
parent3fd51865dfcb6121f84145f4504abd0f80bf6cca (diff)
downloadscala-async-9ea2cc44e98c110843780aef09c7d1a695458be3.tar.gz
scala-async-9ea2cc44e98c110843780aef09c7d1a695458be3.tar.bz2
scala-async-9ea2cc44e98c110843780aef09c7d1a695458be3.zip
Fix #42 - Futures created by async are not properly completed with exceptions
This augments the on-complete handler for an async state with await as follows: if (tr.isFailure) result$async.complete(tr.asInstanceOf[Try[T]]) else { <resultName> = tr.get.asInstanceOf[<resultType>] <nextState> <mkResumeApply> }
Diffstat (limited to 'src/main/scala/scala/async/TransformUtils.scala')
-rw-r--r--src/main/scala/scala/async/TransformUtils.scala2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/main/scala/scala/async/TransformUtils.scala b/src/main/scala/scala/async/TransformUtils.scala
index 5b1fcbe..7571f88 100644
--- a/src/main/scala/scala/async/TransformUtils.scala
+++ b/src/main/scala/scala/async/TransformUtils.scala
@@ -155,6 +155,8 @@ private[async] final case class TransformUtils[C <: Context](c: C) {
}
val Try_get = methodSym(reify((null: scala.util.Try[Any]).get))
+ val Try_isFailure = methodSym(reify((null: scala.util.Try[Any]).isFailure))
+
val TryClass = c.mirror.staticClass("scala.util.Try")
val TryAnyType = appliedType(TryClass.toType, List(definitions.AnyTpe))
val NonFatalClass = c.mirror.staticModule("scala.util.control.NonFatal")