From 3bdb1d69a5c24443726ec7e610fef18ba7d34297 Mon Sep 17 00:00:00 2001 From: Jason Zaugg Date: Wed, 24 Jul 2013 21:56:25 +1000 Subject: Support await in throws. Also support AsyncId.async[Nothing], which was triggering a NPE in the generated `null.asInstanceOf[Nothing]`. --- src/main/scala/scala/async/internal/AnfTransform.scala | 4 ++++ src/main/scala/scala/async/internal/AsyncId.scala | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) (limited to 'src/main') diff --git a/src/main/scala/scala/async/internal/AnfTransform.scala b/src/main/scala/scala/async/internal/AnfTransform.scala index 49cc3c3..7b30590 100644 --- a/src/main/scala/scala/async/internal/AnfTransform.scala +++ b/src/main/scala/scala/async/internal/AnfTransform.scala @@ -164,6 +164,10 @@ private[async] trait AnfTransform { val stats :+ expr = linearize.transformToList(qual) stats :+ treeCopy.Select(tree, expr, sel) + case Throw(expr) => + val stats :+ expr1 = linearize.transformToList(expr) + stats :+ treeCopy.Throw(tree, expr1) + case treeInfo.Applied(fun, targs, argss) if argss.nonEmpty => // we an assume that no await call appears in a by-name argument position, // this has already been checked. diff --git a/src/main/scala/scala/async/internal/AsyncId.scala b/src/main/scala/scala/async/internal/AsyncId.scala index 394f587..4334088 100644 --- a/src/main/scala/scala/async/internal/AsyncId.scala +++ b/src/main/scala/scala/async/internal/AsyncId.scala @@ -23,7 +23,9 @@ object AsyncId extends AsyncBase { */ object IdentityFutureSystem extends FutureSystem { - class Prom[A](var a: A) + class Prom[A] { + var a: A = _ + } type Fut[A] = A type ExecContext = Unit @@ -39,7 +41,7 @@ object IdentityFutureSystem extends FutureSystem { def execContextType: Type = weakTypeOf[Unit] def createProm[A: WeakTypeTag]: Expr[Prom[A]] = reify { - new Prom(null.asInstanceOf[A]) + new Prom() } def promiseToFuture[A: WeakTypeTag](prom: Expr[Prom[A]]) = reify { -- cgit v1.2.3