From 08bd93c20bcdd1bddc172c1477e811e8fc7f8ebd Mon Sep 17 00:00:00 2001 From: Jason Zaugg Date: Fri, 23 Nov 2012 23:44:24 +0100 Subject: Prohibit return. Closes #21 --- src/main/scala/scala/async/AsyncAnalysis.scala | 2 ++ src/test/scala/scala/async/neg/NakedAwait.scala | 12 ++++++++++++ 2 files changed, 14 insertions(+) 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 + } + } } -- cgit v1.2.3