From 386026d6489bd64cc42ac81b76571bf2312d4c42 Mon Sep 17 00:00:00 2001 From: phaller Date: Fri, 9 Nov 2012 18:02:39 +0100 Subject: Reject local object definitions --- src/main/scala/scala/async/ExprBuilder.scala | 4 ++++ src/test/scala/scala/async/neg/LocalClasses0Spec.scala | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/main/scala/scala/async/ExprBuilder.scala b/src/main/scala/scala/async/ExprBuilder.scala index 3d6ac90..0dcc074 100644 --- a/src/main/scala/scala/async/ExprBuilder.scala +++ b/src/main/scala/scala/async/ExprBuilder.scala @@ -533,6 +533,10 @@ class ExprBuilder[C <: Context with Singleton](val c: C) extends AsyncUtils { // 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 ModuleDef(_, name, _) => + // local object definitions lead to spurious type errors (because of resetAllAttrs?) + c.error(stat.pos, s"Local object ${name.decoded} illegal within `async` block") + case _ => checkForUnsupportedAwait(stat) stateBuilder += stat diff --git a/src/test/scala/scala/async/neg/LocalClasses0Spec.scala b/src/test/scala/scala/async/neg/LocalClasses0Spec.scala index 6d4c4da..838c988 100644 --- a/src/test/scala/scala/async/neg/LocalClasses0Spec.scala +++ b/src/test/scala/scala/async/neg/LocalClasses0Spec.scala @@ -97,4 +97,17 @@ class LocalClasses0Spec { """.stripMargin } } + + @Test + def `reject a local singleton object`() { + expectError("Local object Person illegal within `async` block", "-cp target/scala-2.10/classes -deprecation -Xfatal-warnings") { + """ + | import scala.async.Async._ + | async { + | object Person { val name = "Joe" } + | } + """.stripMargin + } + } + } -- cgit v1.2.3