aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-07-07 10:48:11 +1000
committerJason Zaugg <jzaugg@gmail.com>2013-07-07 10:48:11 +1000
commit2d8506a64392cd7192b6831c38798cc9a7c8bfed (patch)
tree84eafcf1a9a179eeaa97dd1e3595c18351b2b814 /src/main/scala/scala
parentc60c38ca6098402f7a9cc6d6746b664bb2b1306c (diff)
downloadscala-async-2d8506a64392cd7192b6831c38798cc9a7c8bfed.tar.gz
scala-async-2d8506a64392cd7192b6831c38798cc9a7c8bfed.tar.bz2
scala-async-2d8506a64392cd7192b6831c38798cc9a7c8bfed.zip
Move implementation details to scala.async.internal._.
If we intend to keep CPS fallback around for any length of time it should probably move there too.
Diffstat (limited to 'src/main/scala/scala')
-rw-r--r--src/main/scala/scala/async/AsyncBase.scala23
-rw-r--r--src/main/scala/scala/async/StateMachine.scala12
-rw-r--r--src/main/scala/scala/async/continuations/AsyncBaseWithCPSFallback.scala3
-rw-r--r--src/main/scala/scala/async/continuations/ScalaConcurrentCPSFallback.scala1
-rw-r--r--src/main/scala/scala/async/internal/AnfTransform.scala (renamed from src/main/scala/scala/async/AnfTransform.scala)3
-rw-r--r--src/main/scala/scala/async/internal/AsyncAnalysis.scala (renamed from src/main/scala/scala/async/AsyncAnalysis.scala)2
-rw-r--r--src/main/scala/scala/async/internal/AsyncBase.scala (renamed from src/main/scala/scala/async/Async.scala)40
-rw-r--r--src/main/scala/scala/async/internal/AsyncId.scala64
-rw-r--r--src/main/scala/scala/async/internal/AsyncMacro.scala (renamed from src/main/scala/scala/async/AsyncMacro.scala)2
-rw-r--r--src/main/scala/scala/async/internal/AsyncTransform.scala (renamed from src/main/scala/scala/async/AsyncTransform.scala)2
-rw-r--r--src/main/scala/scala/async/internal/AsyncUtils.scala (renamed from src/main/scala/scala/async/AsyncUtils.scala)2
-rw-r--r--src/main/scala/scala/async/internal/ExprBuilder.scala (renamed from src/main/scala/scala/async/ExprBuilder.scala)3
-rw-r--r--src/main/scala/scala/async/internal/FutureSystem.scala (renamed from src/main/scala/scala/async/FutureSystem.scala)51
-rw-r--r--src/main/scala/scala/async/internal/Lifter.scala (renamed from src/main/scala/scala/async/Lifter.scala)2
-rw-r--r--src/main/scala/scala/async/internal/StateAssigner.scala (renamed from src/main/scala/scala/async/StateAssigner.scala)4
-rw-r--r--src/main/scala/scala/async/internal/TransformUtils.scala (renamed from src/main/scala/scala/async/TransformUtils.scala)4
16 files changed, 119 insertions, 99 deletions
diff --git a/src/main/scala/scala/async/AsyncBase.scala b/src/main/scala/scala/async/AsyncBase.scala
new file mode 100644
index 0000000..ff04a57
--- /dev/null
+++ b/src/main/scala/scala/async/AsyncBase.scala
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
+ */
+
+package scala.async
+
+import scala.language.experimental.macros
+import scala.reflect.macros.Context
+import scala.concurrent.{Future, ExecutionContext}
+import scala.async.internal.{AsyncBase, ScalaConcurrentFutureSystem}
+
+object Async extends AsyncBase {
+ type FS = ScalaConcurrentFutureSystem.type
+ val futureSystem: FS = ScalaConcurrentFutureSystem
+
+ def async[T](body: T)(implicit execContext: ExecutionContext): Future[T] = macro asyncImpl[T]
+
+ override def asyncImpl[T: c.WeakTypeTag](c: Context)
+ (body: c.Expr[T])
+ (execContext: c.Expr[futureSystem.ExecContext]): c.Expr[Future[T]] = {
+ super.asyncImpl[T](c)(body)(execContext)
+ }
+}
diff --git a/src/main/scala/scala/async/StateMachine.scala b/src/main/scala/scala/async/StateMachine.scala
new file mode 100644
index 0000000..823df71
--- /dev/null
+++ b/src/main/scala/scala/async/StateMachine.scala
@@ -0,0 +1,12 @@
+/*
+ * Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
+ */
+
+package scala.async
+
+/** Internal class used by the `async` macro; should not be manually extended by client code */
+abstract class StateMachine[Result, EC] extends (scala.util.Try[Any] => Unit) with (() => Unit) {
+ def result: Result
+
+ def execContext: EC
+}
diff --git a/src/main/scala/scala/async/continuations/AsyncBaseWithCPSFallback.scala b/src/main/scala/scala/async/continuations/AsyncBaseWithCPSFallback.scala
index 7abc6e8..2902558 100644
--- a/src/main/scala/scala/async/continuations/AsyncBaseWithCPSFallback.scala
+++ b/src/main/scala/scala/async/continuations/AsyncBaseWithCPSFallback.scala
@@ -9,8 +9,9 @@ import scala.language.experimental.macros
import scala.reflect.macros.Context
import scala.util.continuations._
+import scala.async.internal.{AsyncMacro, AsyncUtils}
-trait AsyncBaseWithCPSFallback extends AsyncBase {
+trait AsyncBaseWithCPSFallback extends internal.AsyncBase {
/* Fall-back for `await` using CPS plugin.
*
diff --git a/src/main/scala/scala/async/continuations/ScalaConcurrentCPSFallback.scala b/src/main/scala/scala/async/continuations/ScalaConcurrentCPSFallback.scala
index 018ad05..f864ad6 100644
--- a/src/main/scala/scala/async/continuations/ScalaConcurrentCPSFallback.scala
+++ b/src/main/scala/scala/async/continuations/ScalaConcurrentCPSFallback.scala
@@ -7,6 +7,7 @@ package continuations
import scala.util.continuations._
import scala.concurrent.{Future, Promise, ExecutionContext}
+import scala.async.internal.ScalaConcurrentFutureSystem
trait ScalaConcurrentCPSFallback {
self: AsyncBaseWithCPSFallback =>
diff --git a/src/main/scala/scala/async/AnfTransform.scala b/src/main/scala/scala/async/internal/AnfTransform.scala
index 14263da..80f8161 100644
--- a/src/main/scala/scala/async/AnfTransform.scala
+++ b/src/main/scala/scala/async/internal/AnfTransform.scala
@@ -3,9 +3,10 @@
* Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
*/
-package scala.async
+package scala.async.internal
import scala.tools.nsc.Global
+import scala.Predef._
private[async] trait AnfTransform {
self: AsyncMacro =>
diff --git a/src/main/scala/scala/async/AsyncAnalysis.scala b/src/main/scala/scala/async/internal/AsyncAnalysis.scala
index 424318e..62842c9 100644
--- a/src/main/scala/scala/async/AsyncAnalysis.scala
+++ b/src/main/scala/scala/async/internal/AsyncAnalysis.scala
@@ -2,7 +2,7 @@
* Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
*/
-package scala.async
+package scala.async.internal
import scala.reflect.macros.Context
import scala.collection.mutable
diff --git a/src/main/scala/scala/async/Async.scala b/src/main/scala/scala/async/internal/AsyncBase.scala
index 5f577cf..2f7e38d 100644
--- a/src/main/scala/scala/async/Async.scala
+++ b/src/main/scala/scala/async/internal/AsyncBase.scala
@@ -2,39 +2,10 @@
* Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
*/
-package scala.async
+package scala.async.internal
-import scala.language.experimental.macros
-import scala.reflect.macros.Context
import scala.reflect.internal.annotations.compileTimeOnly
-import scala.tools.nsc.Global
-import language.reflectiveCalls
-import scala.concurrent.ExecutionContext
-
-object Async extends AsyncBase {
-
- import scala.concurrent.Future
-
- lazy val futureSystem = ScalaConcurrentFutureSystem
- type FS = ScalaConcurrentFutureSystem.type
-
- def async[T](body: T)(implicit execContext: ExecutionContext): Future[T] = macro asyncImpl[T]
-
- override def asyncImpl[T: c.WeakTypeTag](c: Context)
- (body: c.Expr[T])
- (execContext: c.Expr[futureSystem.ExecContext]): c.Expr[Future[T]] = {
- super.asyncImpl[T](c)(body)(execContext)
- }
-}
-
-object AsyncId extends AsyncBase {
- lazy val futureSystem = IdentityFutureSystem
- type FS = IdentityFutureSystem.type
-
- def async[T](body: T) = macro asyncIdImpl[T]
-
- def asyncIdImpl[T: c.WeakTypeTag](c: Context)(body: c.Expr[T]): c.Expr[T] = asyncImpl[T](c)(body)(c.literalUnit)
-}
+import scala.reflect.macros.Context
/**
* A base class for the `async` macro. Subclasses must provide:
@@ -85,10 +56,3 @@ abstract class AsyncBase {
c.Expr[futureSystem.Fut[T]](code.asInstanceOf[Tree])
}
}
-
-/** Internal class used by the `async` macro; should not be manually extended by client code */
-abstract class StateMachine[Result, EC] extends (scala.util.Try[Any] => Unit) with (() => Unit) {
- def result: Result
-
- def execContext: EC
-}
diff --git a/src/main/scala/scala/async/internal/AsyncId.scala b/src/main/scala/scala/async/internal/AsyncId.scala
new file mode 100644
index 0000000..394f587
--- /dev/null
+++ b/src/main/scala/scala/async/internal/AsyncId.scala
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
+ */
+
+package scala.async.internal
+
+import language.experimental.macros
+import scala.reflect.macros.Context
+import scala.reflect.internal.SymbolTable
+
+object AsyncId extends AsyncBase {
+ lazy val futureSystem = IdentityFutureSystem
+ type FS = IdentityFutureSystem.type
+
+ def async[T](body: T) = macro asyncIdImpl[T]
+
+ def asyncIdImpl[T: c.WeakTypeTag](c: Context)(body: c.Expr[T]): c.Expr[T] = asyncImpl[T](c)(body)(c.literalUnit)
+}
+
+/**
+ * A trivial implementation of [[FutureSystem]] that performs computations
+ * on the current thread. Useful for testing.
+ */
+object IdentityFutureSystem extends FutureSystem {
+
+ class Prom[A](var a: A)
+
+ type Fut[A] = A
+ type ExecContext = Unit
+
+ def mkOps(c: SymbolTable): Ops {val universe: c.type} = new Ops {
+ val universe: c.type = c
+
+ import universe._
+
+ def execContext: Expr[ExecContext] = Expr[Unit](Literal(Constant(())))
+
+ def promType[A: WeakTypeTag]: Type = weakTypeOf[Prom[A]]
+ def execContextType: Type = weakTypeOf[Unit]
+
+ def createProm[A: WeakTypeTag]: Expr[Prom[A]] = reify {
+ new Prom(null.asInstanceOf[A])
+ }
+
+ def promiseToFuture[A: WeakTypeTag](prom: Expr[Prom[A]]) = reify {
+ prom.splice.a
+ }
+
+ 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],
+ 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 {
+ prom.splice.a = value.splice.get
+ Expr[Unit](Literal(Constant(()))).splice
+ }
+
+ def castTo[A: WeakTypeTag](future: Expr[Fut[Any]]): Expr[Fut[A]] = ???
+ }
+}
diff --git a/src/main/scala/scala/async/AsyncMacro.scala b/src/main/scala/scala/async/internal/AsyncMacro.scala
index 8827351..6b7d031 100644
--- a/src/main/scala/scala/async/AsyncMacro.scala
+++ b/src/main/scala/scala/async/internal/AsyncMacro.scala
@@ -1,4 +1,4 @@
-package scala.async
+package scala.async.internal
import scala.tools.nsc.Global
import scala.tools.nsc.transform.TypingTransformers
diff --git a/src/main/scala/scala/async/AsyncTransform.scala b/src/main/scala/scala/async/internal/AsyncTransform.scala
index 129f88e..bdc8664 100644
--- a/src/main/scala/scala/async/AsyncTransform.scala
+++ b/src/main/scala/scala/async/internal/AsyncTransform.scala
@@ -1,4 +1,4 @@
-package scala.async
+package scala.async.internal
trait AsyncTransform {
self: AsyncMacro =>
diff --git a/src/main/scala/scala/async/AsyncUtils.scala b/src/main/scala/scala/async/internal/AsyncUtils.scala
index 1ade5f0..8700bd6 100644
--- a/src/main/scala/scala/async/AsyncUtils.scala
+++ b/src/main/scala/scala/async/internal/AsyncUtils.scala
@@ -1,7 +1,7 @@
/*
* Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
*/
-package scala.async
+package scala.async.internal
object AsyncUtils {
diff --git a/src/main/scala/scala/async/ExprBuilder.scala b/src/main/scala/scala/async/internal/ExprBuilder.scala
index a3837d3..1ce30e6 100644
--- a/src/main/scala/scala/async/ExprBuilder.scala
+++ b/src/main/scala/scala/async/internal/ExprBuilder.scala
@@ -1,7 +1,7 @@
/*
* Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
*/
-package scala.async
+package scala.async.internal
import scala.reflect.macros.Context
import scala.collection.mutable.ListBuffer
@@ -9,6 +9,7 @@ import collection.mutable
import language.existentials
import scala.reflect.api.Universe
import scala.reflect.api
+import scala.Some
trait ExprBuilder {
builder: AsyncMacro =>
diff --git a/src/main/scala/scala/async/FutureSystem.scala b/src/main/scala/scala/async/internal/FutureSystem.scala
index 0c04296..101b7bf 100644
--- a/src/main/scala/scala/async/FutureSystem.scala
+++ b/src/main/scala/scala/async/internal/FutureSystem.scala
@@ -1,7 +1,7 @@
/*
* Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
*/
-package scala.async
+package scala.async.internal
import scala.language.higherKinds
@@ -15,7 +15,7 @@ import scala.reflect.internal.SymbolTable
* customize the code generation.
*
* The API mirrors that of `scala.concurrent.Future`, see the instance
- * [[scala.async.ScalaConcurrentFutureSystem]] for an example of how
+ * [[ScalaConcurrentFutureSystem]] for an example of how
* to implement this.
*/
trait FutureSystem {
@@ -61,7 +61,6 @@ trait FutureSystem {
def mkOps(c: SymbolTable): Ops { val universe: c.type }
}
-
object ScalaConcurrentFutureSystem extends FutureSystem {
import scala.concurrent._
@@ -105,49 +104,3 @@ object ScalaConcurrentFutureSystem extends FutureSystem {
}
}
}
-
-/**
- * A trivial implementation of [[scala.async.FutureSystem]] that performs computations
- * on the current thread. Useful for testing.
- */
-object IdentityFutureSystem extends FutureSystem {
-
- class Prom[A](var a: A)
-
- type Fut[A] = A
- type ExecContext = Unit
-
- def mkOps(c: SymbolTable): Ops {val universe: c.type} = new Ops {
- val universe: c.type = c
-
- import universe._
-
- def execContext: Expr[ExecContext] = Expr[Unit](Literal(Constant(())))
-
- def promType[A: WeakTypeTag]: Type = weakTypeOf[Prom[A]]
- def execContextType: Type = weakTypeOf[Unit]
-
- def createProm[A: WeakTypeTag]: Expr[Prom[A]] = reify {
- new Prom(null.asInstanceOf[A])
- }
-
- def promiseToFuture[A: WeakTypeTag](prom: Expr[Prom[A]]) = reify {
- prom.splice.a
- }
-
- 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],
- 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 {
- prom.splice.a = value.splice.get
- Expr[Unit](Literal(Constant(()))).splice
- }
-
- def castTo[A: WeakTypeTag](future: Expr[Fut[Any]]): Expr[Fut[A]] = ???
- }
-}
diff --git a/src/main/scala/scala/async/Lifter.scala b/src/main/scala/scala/async/internal/Lifter.scala
index 52ce47d..f49dcbb 100644
--- a/src/main/scala/scala/async/Lifter.scala
+++ b/src/main/scala/scala/async/internal/Lifter.scala
@@ -1,4 +1,4 @@
-package scala.async
+package scala.async.internal
trait Lifter {
self: AsyncMacro =>
diff --git a/src/main/scala/scala/async/StateAssigner.scala b/src/main/scala/scala/async/internal/StateAssigner.scala
index bc60a6d..cdde7a4 100644
--- a/src/main/scala/scala/async/StateAssigner.scala
+++ b/src/main/scala/scala/async/internal/StateAssigner.scala
@@ -2,7 +2,7 @@
* Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
*/
-package scala.async
+package scala.async.internal
private[async] final class StateAssigner {
private var current = -1
@@ -11,4 +11,4 @@ private[async] final class StateAssigner {
current += 1
current
}
-} \ No newline at end of file
+}
diff --git a/src/main/scala/scala/async/TransformUtils.scala b/src/main/scala/scala/async/internal/TransformUtils.scala
index d69d03a..2582c91 100644
--- a/src/main/scala/scala/async/TransformUtils.scala
+++ b/src/main/scala/scala/async/internal/TransformUtils.scala
@@ -1,7 +1,7 @@
/*
* Copyright (C) 2012 Typesafe Inc. <http://www.typesafe.com>
*/
-package scala.async
+package scala.async.internal
import scala.reflect.macros.Context
import reflect.ClassTag
@@ -89,7 +89,7 @@ private[async] trait TransformUtils {
val Try_isFailure = TryClass.typeSignature.member(newTermName("isFailure")).ensuring(_ != NoSymbol)
val TryAnyType = appliedType(TryClass.toType, List(definitions.AnyTpe))
val NonFatalClass = rootMirror.staticModule("scala.util.control.NonFatal")
- val AsyncClass = rootMirror.staticClass("scala.async.AsyncBase")
+ val AsyncClass = rootMirror.staticClass("scala.async.internal.AsyncBase")
val Async_await = AsyncClass.typeSignature.member(newTermName("await")).ensuring(_ != NoSymbol)
}