aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/scala/scala/async/ExprBuilder.scala4
-rw-r--r--src/test/scala/scala/async/neg/LocalClasses0Spec.scala13
2 files changed, 17 insertions, 0 deletions
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
+ }
+ }
+
}