diff options
author | phaller <philipp.haller@typesafe.com> | 2012-11-09 18:02:39 +0100 |
---|---|---|
committer | phaller <philipp.haller@typesafe.com> | 2012-11-09 18:02:39 +0100 |
commit | 386026d6489bd64cc42ac81b76571bf2312d4c42 (patch) | |
tree | 79cec1a55cb55f72d6f75a09bd3a7c4636307741 | |
parent | d82e8919c05a2069b6d06675867d4b3878c981d6 (diff) | |
download | scala-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.scala | 4 | ||||
-rw-r--r-- | src/test/scala/scala/async/neg/LocalClasses0Spec.scala | 13 |
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 + } + } + } |