diff options
author | phaller <hallerp@gmail.com> | 2012-12-19 00:22:13 +0100 |
---|---|---|
committer | phaller <hallerp@gmail.com> | 2012-12-19 00:22:13 +0100 |
commit | e8e84ba8d3e3ebf266250cdb48176a9fef5361d9 (patch) | |
tree | fc0fd882aa34b8b5e5571e26164c62b551e2c9fe /src/main/scala/scala/async/TransformUtils.scala | |
parent | 3859c11bca3ce9d9d2b18ec629dcc4b6218cf2e0 (diff) | |
download | scala-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.scala | 7 |
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. */ |