aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorphaller <philipp.haller@typesafe.com>2012-11-09 18:02:39 +0100
committerphaller <philipp.haller@typesafe.com>2012-11-09 18:02:39 +0100
commit386026d6489bd64cc42ac81b76571bf2312d4c42 (patch)
tree79cec1a55cb55f72d6f75a09bd3a7c4636307741
parentd82e8919c05a2069b6d06675867d4b3878c981d6 (diff)
downloadscala-async-386026d6489bd64cc42ac81b76571bf2312d4c42.tar.gz
scala-async-386026d6489bd64cc42ac81b76571bf2312d4c42.tar.bz2
scala-async-386026d6489bd64cc42ac81b76571bf2312d4c42.zip
Reject local object definitions
-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
+ }
+ }
+
}