From d82e8919c05a2069b6d06675867d4b3878c981d6 Mon Sep 17 00:00:00 2001 From: phaller Date: Fri, 9 Nov 2012 17:49:02 +0100 Subject: Add comment, and decode class names --- src/main/scala/scala/async/ExprBuilder.scala | 3 ++- src/test/scala/scala/async/neg/LocalClasses0Spec.scala | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/main/scala/scala/async/ExprBuilder.scala b/src/main/scala/scala/async/ExprBuilder.scala index 3a27d1d..3d6ac90 100644 --- a/src/main/scala/scala/async/ExprBuilder.scala +++ b/src/main/scala/scala/async/ExprBuilder.scala @@ -530,7 +530,8 @@ class ExprBuilder[C <: Context with Singleton](val c: C) extends AsyncUtils { stateBuilder = new builder.AsyncStateBuilder(currState, toRename) case ClassDef(_, name, _, _) => - c.error(stat.pos, s"Local class $name illegal within `async` block") + // do not allow local class definitions, because of SI-5467 (specific to case classes, though) + c.error(stat.pos, s"Local class ${name.decoded} illegal within `async` block") case _ => checkForUnsupportedAwait(stat) diff --git a/src/test/scala/scala/async/neg/LocalClasses0Spec.scala b/src/test/scala/scala/async/neg/LocalClasses0Spec.scala index 6c7b579..6d4c4da 100644 --- a/src/test/scala/scala/async/neg/LocalClasses0Spec.scala +++ b/src/test/scala/scala/async/neg/LocalClasses0Spec.scala @@ -58,6 +58,23 @@ class LocalClasses0Spec { } } + @Test + def `reject a local class with symbols in its name`() { + expectError("Local class :: illegal within `async` block", "-cp target/scala-2.10/classes -deprecation -Xfatal-warnings") { + """ + | import scala.concurrent.{Future, ExecutionContext} + | import ExecutionContext.Implicits.global + | import scala.async.Async._ + | async { + | val fut = Future { 5 } + | val x = await(fut) + | case class ::(name: String) + | x + | } + """.stripMargin + } + } + @Test def `reject a nested local class`() { expectError("Local class Person illegal within `async` block", "-cp target/scala-2.10/classes -deprecation -Xfatal-warnings") { -- cgit v1.2.3