diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main/scala/scala/async/Async.scala | 2 | ||||
-rw-r--r-- | src/main/scala/scala/async/internal/AsyncId.scala | 2 | ||||
-rw-r--r-- | src/test/scala/scala/async/run/WarningsSpec.scala | 19 |
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 = """ |