aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/scala/async/TransformUtils.scala
diff options
context:
space:
mode:
authorphaller <hallerp@gmail.com>2012-12-19 00:22:13 +0100
committerphaller <hallerp@gmail.com>2012-12-19 00:22:13 +0100
commite8e84ba8d3e3ebf266250cdb48176a9fef5361d9 (patch)
treefc0fd882aa34b8b5e5571e26164c62b551e2c9fe /src/main/scala/scala/async/TransformUtils.scala
parent3859c11bca3ce9d9d2b18ec629dcc4b6218cf2e0 (diff)
downloadscala-async-e8e84ba8d3e3ebf266250cdb48176a9fef5361d9.tar.gz
scala-async-e8e84ba8d3e3ebf266250cdb48176a9fef5361d9.tar.bz2
scala-async-e8e84ba8d3e3ebf266250cdb48176a9fef5361d9.zip
New fix for #1861: Add fall-back to CPS for all unsupported uses of await
This is a re-implementation of a previous fix. It is more modular, since it enables the definition of a CPS-based fall-back as a subclass of `AsyncBase`. Thus, it's possible to define fall-back-enabled subclasses of `AsyncBase` targetting not only Scala Futures.
Diffstat (limited to 'src/main/scala/scala/async/TransformUtils.scala')
-rw-r--r--src/main/scala/scala/async/TransformUtils.scala7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/main/scala/scala/async/TransformUtils.scala b/src/main/scala/scala/async/TransformUtils.scala
index f780799..faebcc3 100644
--- a/src/main/scala/scala/async/TransformUtils.scala
+++ b/src/main/scala/scala/async/TransformUtils.scala
@@ -162,11 +162,14 @@ private[async] final case class TransformUtils[C <: Context](c: C) {
val TryAnyType = appliedType(TryClass.toType, List(definitions.AnyTpe))
val NonFatalClass = c.mirror.staticModule("scala.util.control.NonFatal")
- val Async_await = {
+ private def asyncMember(name: String) = {
val asyncMod = c.mirror.staticClass("scala.async.AsyncBase")
val tpe = asyncMod.asType.toType
- tpe.member(c.universe.newTermName("await")).ensuring(_ != NoSymbol)
+ tpe.member(newTermName(name)).ensuring(_ != NoSymbol)
}
+
+ val Async_await = asyncMember("await")
+ val Async_awaitFallback = asyncMember("awaitFallback")
}
/** `termSym( (_: Foo).bar(null: A, null: B)` will return the symbol of `bar`, after overload resolution. */