aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2012-11-23 23:44:24 +0100
committerJason Zaugg <jzaugg@gmail.com>2012-11-23 23:44:24 +0100
commit08bd93c20bcdd1bddc172c1477e811e8fc7f8ebd (patch)
treef05d905047a0e5ed3c2560b4b2b465b50c15a7b4
parentd193065827c40002de1e56c316eb026907536c17 (diff)
downloadscala-async-08bd93c20bcdd1bddc172c1477e811e8fc7f8ebd.tar.gz
scala-async-08bd93c20bcdd1bddc172c1477e811e8fc7f8ebd.tar.bz2
scala-async-08bd93c20bcdd1bddc172c1477e811e8fc7f8ebd.zip
Prohibit return.
Closes #21
-rw-r--r--src/main/scala/scala/async/AsyncAnalysis.scala2
-rw-r--r--src/test/scala/scala/async/neg/NakedAwait.scala12
2 files changed, 14 insertions, 0 deletions
diff --git a/src/main/scala/scala/async/AsyncAnalysis.scala b/src/main/scala/scala/async/AsyncAnalysis.scala
index 38fd22f..e319fe8 100644
--- a/src/main/scala/scala/async/AsyncAnalysis.scala
+++ b/src/main/scala/scala/async/AsyncAnalysis.scala
@@ -62,6 +62,8 @@ private[async] final case class AsyncAnalysis[C <: Context](override val c: C) e
tree match {
case Try(_, _, _) if containsAwait =>
reportUnsupportedAwait(tree, "try/catch")
+ case Return(_) =>
+ c.abort(tree.pos, "return is illegal within a async block")
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 61490e2..229feb6 100644
--- a/src/test/scala/scala/async/neg/NakedAwait.scala
+++ b/src/test/scala/scala/async/neg/NakedAwait.scala
@@ -127,4 +127,16 @@ class NakedAwait {
""".stripMargin
}
}
+
+ @Test
+ def returnIllegal() {
+ expectError("return is illegal") {
+ """
+ | import _root_.scala.async.AsyncId._
+ | def foo(): Any = async { return false }
+ | ()
+ |
+ |""".stripMargin
+ }
+ }
}