aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/scala/async/ExprBuilder.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2012-11-11 17:22:17 +0100
committerJason Zaugg <jzaugg@gmail.com>2012-11-11 17:22:17 +0100
commit23e24fc738e2d4ad967090c375cd356cf45745ce (patch)
treec2fff138f04d76ec990654e12ef99c04d46a06ab /src/main/scala/scala/async/ExprBuilder.scala
parent412682afb20def5e50533c300439828078d5e657 (diff)
downloadscala-async-23e24fc738e2d4ad967090c375cd356cf45745ce.tar.gz
scala-async-23e24fc738e2d4ad967090c375cd356cf45745ce.tar.bz2
scala-async-23e24fc738e2d4ad967090c375cd356cf45745ce.zip
Fixes #7, allow async blocks without await or with a single expression.
Diffstat (limited to 'src/main/scala/scala/async/ExprBuilder.scala')
-rw-r--r--src/main/scala/scala/async/ExprBuilder.scala14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/main/scala/scala/async/ExprBuilder.scala b/src/main/scala/scala/async/ExprBuilder.scala
index 22f3738..09489d4 100644
--- a/src/main/scala/scala/async/ExprBuilder.scala
+++ b/src/main/scala/scala/async/ExprBuilder.scala
@@ -22,6 +22,7 @@ final class ExprBuilder[C <: Context, FS <: FutureSystem](val c: C, val futureSy
object name {
def suffix(string: String) = string + "$async"
+
def suffixedName(prefix: String) = newTermName(suffix(prefix))
val state = suffixedName("state")
@@ -375,17 +376,19 @@ final class ExprBuilder[C <: Context, FS <: FutureSystem](val c: C, val futureSy
asyncStates += lastState
def mkCombinedHandlerCases[T](): List[CaseDef] = {
- assert(asyncStates.size > 1)
- val initCases = for (state <- asyncStates.toList.init) yield state.mkHandlerCaseForState()
-
val caseForLastState: CaseDef = {
val lastState = asyncStates.last
val lastStateBody = c.Expr[T](lastState.body)
val rhs = futureSystemOps.completeProm(c.Expr[futureSystem.Prom[T]](Ident(name.result)), reify(scala.util.Success(lastStateBody.splice)))
mkHandlerCase(lastState.state, rhs.tree)
}
-
- initCases :+ caseForLastState
+ asyncStates.toList match {
+ case s :: Nil =>
+ List(caseForLastState)
+ case _ =>
+ val initCases = for (state <- asyncStates.toList.init) yield state.mkHandlerCaseForState()
+ initCases :+ caseForLastState
+ }
}
}
@@ -432,4 +435,5 @@ final class ExprBuilder[C <: Context, FS <: FutureSystem](val c: C, val futureSy
tpe.member(c.universe.newTermName("await"))
}
}
+
}