diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2013-11-13 18:28:45 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2013-11-13 19:17:12 +0100 |
commit | 32500577c34c2eff39e06620a7027c27be31b9e4 (patch) | |
tree | a4d5b4ecf37640e0b628a01a4901af3d3529c794 /src/main/scala/scala/async/internal/AsyncId.scala | |
parent | 2eba82f8b7687dd898b89496451ebb3ae9519692 (diff) | |
download | scala-async-32500577c34c2eff39e06620a7027c27be31b9e4.tar.gz scala-async-32500577c34c2eff39e06620a7027c27be31b9e4.tar.bz2 scala-async-32500577c34c2eff39e06620a7027c27be31b9e4.zip |
Abstract over use of scala.util.Try
Custom implementation of the async macro may choose to use
a different data type to represent `Throwable | A`.
Diffstat (limited to 'src/main/scala/scala/async/internal/AsyncId.scala')
-rw-r--r-- | src/main/scala/scala/async/internal/AsyncId.scala | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/main/scala/scala/async/internal/AsyncId.scala b/src/main/scala/scala/async/internal/AsyncId.scala index a794f93..5343a82 100644 --- a/src/main/scala/scala/async/internal/AsyncId.scala +++ b/src/main/scala/scala/async/internal/AsyncId.scala @@ -50,6 +50,7 @@ object IdentityFutureSystem extends FutureSystem { type Fut[A] = A type ExecContext = Unit + type Tryy[A] = scala.util.Try[A] def mkOps(c: SymbolTable): Ops {val universe: c.type} = new Ops { val universe: c.type = c @@ -59,6 +60,7 @@ object IdentityFutureSystem extends FutureSystem { def execContext: Expr[ExecContext] = Expr[Unit](Literal(Constant(()))) def promType[A: WeakTypeTag]: Type = weakTypeOf[Prom[A]] + def tryType[A: WeakTypeTag]: Type = weakTypeOf[scala.util.Try[A]] def execContextType: Type = weakTypeOf[Unit] def createProm[A: WeakTypeTag]: Expr[Prom[A]] = reify { @@ -71,15 +73,29 @@ object IdentityFutureSystem extends FutureSystem { def future[A: WeakTypeTag](t: Expr[A])(execContext: Expr[ExecContext]) = t - def onComplete[A, U](future: Expr[Fut[A]], fun: Expr[scala.util.Try[A] => U], + def onComplete[A, U](future: Expr[Fut[A]], fun: Expr[Tryy[A] => U], execContext: Expr[ExecContext]): Expr[Unit] = reify { fun.splice.apply(util.Success(future.splice)) Expr[Unit](Literal(Constant(()))).splice } - def completeProm[A](prom: Expr[Prom[A]], value: Expr[scala.util.Try[A]]): Expr[Unit] = reify { + def completeProm[A](prom: Expr[Prom[A]], value: Expr[Tryy[A]]): Expr[Unit] = reify { prom.splice.a = value.splice.get Expr[Unit](Literal(Constant(()))).splice } + + def tryyIsFailure[A](tryy: Expr[Tryy[A]]): Expr[Boolean] = reify { + tryy.splice.isFailure + } + + def tryyGet[A](tryy: Expr[Tryy[A]]): Expr[A] = reify { + tryy.splice.get + } + def tryySuccess[A: WeakTypeTag](a: Expr[A]): Expr[Tryy[A]] = reify { + scala.util.Success[A](a.splice) + } + def tryyFailure[A: WeakTypeTag](a: Expr[Throwable]): Expr[Tryy[A]] = reify { + scala.util.Failure[A](a.splice) + } } } |