aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-07-25 13:55:06 +1000
committerJason Zaugg <jzaugg@gmail.com>2013-07-25 13:55:06 +1000
commit2c3a81ca101e103c1defa5e34aaeefa096911c0b (patch)
tree9994040cc851a2cda27c0adfaf7b28a8e0befd09
parent3b9d72928738f34449b1e67a18623458bdcd16d5 (diff)
downloadscala-async-2c3a81ca101e103c1defa5e34aaeefa096911c0b.tar.gz
scala-async-2c3a81ca101e103c1defa5e34aaeefa096911c0b.tar.bz2
scala-async-2c3a81ca101e103c1defa5e34aaeefa096911c0b.zip
Disallow await in pattern guards (for now)
-rw-r--r--src/main/scala/scala/async/internal/AsyncAnalysis.scala3
-rw-r--r--src/test/scala/scala/async/neg/NakedAwait.scala10
2 files changed, 13 insertions, 0 deletions
diff --git a/src/main/scala/scala/async/internal/AsyncAnalysis.scala b/src/main/scala/scala/async/internal/AsyncAnalysis.scala
index 62842c9..122109e 100644
--- a/src/main/scala/scala/async/internal/AsyncAnalysis.scala
+++ b/src/main/scala/scala/async/internal/AsyncAnalysis.scala
@@ -63,6 +63,9 @@ trait AsyncAnalysis {
case ValDef(mods, _, _, _) if mods.hasFlag(Flag.LAZY) =>
// TODO lift this restriction
abort(tree.pos, "lazy vals are illegal within an async block")
+ case CaseDef(_, guard, _) if guard exists isAwait =>
+ // TODO lift this restriction
+ reportUnsupportedAwait(tree, "pattern guard")
case _ =>
super.traverse(tree)
}
diff --git a/src/test/scala/scala/async/neg/NakedAwait.scala b/src/test/scala/scala/async/neg/NakedAwait.scala
index aa62d37..ba388c5 100644
--- a/src/test/scala/scala/async/neg/NakedAwait.scala
+++ b/src/test/scala/scala/async/neg/NakedAwait.scala
@@ -133,6 +133,16 @@ class NakedAwait {
}
@Test
+ def guard() {
+ expectError("await must not be used under a pattern guard.") {
+ """
+ | import _root_.scala.async.internal.AsyncId._
+ | async { 1 match { case _ if await(true) => } }
+ """.stripMargin
+ }
+ }
+
+ @Test
def nestedMethod() {
expectError("await must not be used under a nested method.") {
"""