aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2015-07-29 19:36:36 +1000
committerJason Zaugg <jzaugg@gmail.com>2015-07-29 19:36:36 +1000
commit4b1dbeef9ec73612867afc5dd9c925faa8cbc30d (patch)
tree72cee6f538efa06569647c9b309483b8f911e97a /src
parent6d44255964092b672accd7784ddc712d30f1d7c4 (diff)
downloadscala-async-4b1dbeef9ec73612867afc5dd9c925faa8cbc30d.tar.gz
scala-async-4b1dbeef9ec73612867afc5dd9c925faa8cbc30d.tar.bz2
scala-async-4b1dbeef9ec73612867afc5dd9c925faa8cbc30d.zip
Avoid dead code warning with async(throw T)
By declararing the parameter of `async` as by-name. Fixes #150 (the bug in the original ticket.)
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/scala/async/Async.scala2
-rw-r--r--src/main/scala/scala/async/internal/AsyncId.scala2
-rw-r--r--src/test/scala/scala/async/run/WarningsSpec.scala19
3 files changed, 21 insertions, 2 deletions
diff --git a/src/main/scala/scala/async/Async.scala b/src/main/scala/scala/async/Async.scala
index bacf70a..0bba6ed 100644
--- a/src/main/scala/scala/async/Async.scala
+++ b/src/main/scala/scala/async/Async.scala
@@ -42,7 +42,7 @@ object Async {
* Run the block of code `body` asynchronously. `body` may contain calls to `await` when the results of
* a `Future` are needed; this is translated into non-blocking code.
*/
- def async[T](body: T)(implicit execContext: ExecutionContext): Future[T] = macro internal.ScalaConcurrentAsync.asyncImpl[T]
+ def async[T](body: => T)(implicit execContext: ExecutionContext): Future[T] = macro internal.ScalaConcurrentAsync.asyncImpl[T]
/**
* Non-blocking await the on result of `awaitable`. This may only be used directly within an enclosing `async` block.
diff --git a/src/main/scala/scala/async/internal/AsyncId.scala b/src/main/scala/scala/async/internal/AsyncId.scala
index 6b4dbce..3afa55b 100644
--- a/src/main/scala/scala/async/internal/AsyncId.scala
+++ b/src/main/scala/scala/async/internal/AsyncId.scala
@@ -12,7 +12,7 @@ object AsyncId extends AsyncBase {
lazy val futureSystem = IdentityFutureSystem
type FS = IdentityFutureSystem.type
- def async[T](body: T) = macro asyncIdImpl[T]
+ def async[T](body: => T) = macro asyncIdImpl[T]
def asyncIdImpl[T: c.WeakTypeTag](c: Context)(body: c.Expr[T]): c.Expr[T] = asyncImpl[T](c)(body)(c.literalUnit)
}
diff --git a/src/test/scala/scala/async/run/WarningsSpec.scala b/src/test/scala/scala/async/run/WarningsSpec.scala
index f0b414a..3b16899 100644
--- a/src/test/scala/scala/async/run/WarningsSpec.scala
+++ b/src/test/scala/scala/async/run/WarningsSpec.scala
@@ -32,6 +32,25 @@ class WarningsSpec {
}
@Test
+ // https://github.com/scala/async/issues/74
+ def noDeadCodeWarningForAsyncThrow() {
+ val global = mkGlobal("-cp ${toolboxClasspath} -Yrangepos -Ywarn-dead-code -Xfatal-warnings")
+ // was: "a pure expression does nothing in statement position; you may be omitting necessary parentheses"
+ val source =
+ """
+ | class Test {
+ | import scala.async.Async._
+ | import scala.concurrent.ExecutionContext.Implicits.global
+ | async { throw new Error() }
+ | }
+ """.stripMargin
+ val run = new global.Run
+ val sourceFile = global.newSourceFile(source)
+ run.compileSources(sourceFile :: Nil)
+ assert(!global.reporter.hasErrors, global.reporter.asInstanceOf[StoreReporter].infos)
+ }
+
+ @Test
def noDeadCodeWarning() {
val global = mkGlobal("-cp ${toolboxClasspath} -Yrangepos -Ywarn-dead-code -Xfatal-warnings")
val source = """