diff options
author | Philipp Haller <hallerp@gmail.com> | 2013-04-26 18:11:59 +0200 |
---|---|---|
committer | Philipp Haller <hallerp@gmail.com> | 2013-04-26 18:11:59 +0200 |
commit | 782d4c8bed1bf2da2e28becbec3d168d1c11d1fa (patch) | |
tree | ce6b53d1e68c51639216dc50713a94f9dcac5930 | |
parent | 9d134adc8e448906ee6ab6cb4db59320557a880c (diff) | |
download | scala-async-782d4c8bed1bf2da2e28becbec3d168d1c11d1fa.tar.gz scala-async-782d4c8bed1bf2da2e28becbec3d168d1c11d1fa.tar.bz2 scala-async-782d4c8bed1bf2da2e28becbec3d168d1c11d1fa.zip |
Refactor TryBasedFutureSystem
-rw-r--r-- | src/main/scala/scala/async/FutureSystem.scala | 51 |
1 files changed, 19 insertions, 32 deletions
diff --git a/src/main/scala/scala/async/FutureSystem.scala b/src/main/scala/scala/async/FutureSystem.scala index 7e14c44..8230a0e 100644 --- a/src/main/scala/scala/async/FutureSystem.scala +++ b/src/main/scala/scala/async/FutureSystem.scala @@ -78,6 +78,21 @@ trait TryBasedFutureSystem extends FutureSystem { trait OpsWithTry extends Ops { import c.universe._ + protected def completePromWithTry[A: WeakTypeTag](prom: Expr[Prom[A]], value: Expr[scala.util.Try[A]]): Expr[Unit] + + def completeProm[A: WeakTypeTag](prom: Expr[Prom[A]], value: Expr[A]): Expr[Unit] = + completePromWithTry(prom, reify(scala.util.Success(value.splice))) + + def completePromWithExceptionTopLevel[A: WeakTypeTag](prom: Expr[Prom[A]], exception: Expr[Throwable]): Expr[Unit] = + completePromWithTry(prom, reify(scala.util.Failure(exception.splice))) + + def completePromWithFailedResult[A: WeakTypeTag](prom: Expr[Prom[A]], resultName: TermName): Expr[Unit] = { + val result = c.Expr[scala.util.Try[A]]( + TypeApply(Select(Ident(resultName), newTermName("asInstanceOf")), + List(TypeTree(weakTypeOf[scala.util.Try[A]])))) + completePromWithTry(prom, result) + } + /** `methodSym( (_: Foo).bar(null: A, null: B)` will return the symbol of `bar`, after overload resolution. */ private def methodSym(apply: c.Expr[Any]): Symbol = { val tree2: Tree = c.typeCheck(apply.tree) @@ -136,26 +151,11 @@ object ScalaConcurrentFutureSystem extends TryBasedFutureSystem { future.splice.onComplete(fun.splice)(execContext.splice) } - def completeProm[A: WeakTypeTag](prom: Expr[Prom[A]], value: Expr[A]): Expr[Unit] = reify { - prom.splice.success(value.splice) - c.literalUnit.splice - } - - def completePromWithExceptionTopLevel[A: WeakTypeTag](prom: Expr[Prom[A]], exception: Expr[Throwable]): Expr[Unit] = reify { - prom.splice.failure(exception.splice) + protected def completePromWithTry[A: WeakTypeTag](prom: Expr[Prom[A]], value: Expr[scala.util.Try[A]]): Expr[Unit] = reify { + prom.splice.complete(value.splice) c.literalUnit.splice } - def completePromWithFailedResult[A: WeakTypeTag](prom: Expr[Prom[A]], resultName: TermName): Expr[Unit] = { - val result = c.Expr[scala.util.Try[A]]( - TypeApply(Select(Ident(resultName), newTermName("asInstanceOf")), - List(TypeTree(weakTypeOf[scala.util.Try[A]])))) - reify { - prom.splice.complete(result.splice) - c.literalUnit.splice - } - } - def castTo[A: WeakTypeTag](future: Expr[Fut[Any]]): Expr[Fut[A]] = reify { future.splice.asInstanceOf[Fut[A]] } @@ -199,24 +199,11 @@ object IdentityFutureSystem extends TryBasedFutureSystem { c.literalUnit.splice } - def completeProm[A: WeakTypeTag](prom: Expr[Prom[A]], value: Expr[A]): Expr[Unit] = reify { - prom.splice.a = value.splice + protected def completePromWithTry[A: WeakTypeTag](prom: Expr[Prom[A]], value: Expr[scala.util.Try[A]]): Expr[Unit] = reify { + prom.splice.a = value.splice.get c.literalUnit.splice } - def completePromWithExceptionTopLevel[A: WeakTypeTag](prom: Expr[Prom[A]], exception: Expr[Throwable]): Expr[Unit] = reify { - throw exception.splice - } - - def completePromWithFailedResult[A: WeakTypeTag](prom: Expr[Prom[A]], resultName: TermName): Expr[Unit] = { - val result = c.Expr[scala.util.Try[A]]( - TypeApply(Select(Ident(resultName), newTermName("asInstanceOf")), - List(TypeTree(weakTypeOf[scala.util.Try[A]])))) - reify { - throw result.splice.asInstanceOf[scala.util.Failure[A]].exception - } - } - def castTo[A: WeakTypeTag](future: Expr[Fut[Any]]): Expr[Fut[A]] = ??? } } |