diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2012-11-11 17:22:17 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2012-11-11 17:22:17 +0100 |
commit | 23e24fc738e2d4ad967090c375cd356cf45745ce (patch) | |
tree | c2fff138f04d76ec990654e12ef99c04d46a06ab /src/main/scala/scala/async/ExprBuilder.scala | |
parent | 412682afb20def5e50533c300439828078d5e657 (diff) | |
download | scala-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.scala | 14 |
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")) } } + } |