Closed
Description
Running this code:
import scala.concurrent.{Await, Future}
import scala.concurrent.duration.Duration.Inf
import scala.concurrent.ExecutionContext.Implicits.global
import scala.async.Async.{async, await}
object Main {
def main(args: Array[String]): Unit = {
val f = async {
val a = Future.successful(new A(BigInt(42)))
await(await(a).g)
}
Await.result(f, Inf)
}
}
class A(val b: BigInt) extends AnyVal {
def g = Future.successful(b + 1)
}
results in an NPE:
java.lang.NullPointerException
at Main$stateMachine$macro$1$1.resume(Main.scala:9)
at Main$stateMachine$macro$1$1.apply(Main.scala:9)
at Main$stateMachine$macro$1$1.apply(Main.scala:9)
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
at scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:121)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.pollAndExecAll(ForkJoinPool.java:1253)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1346)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
If extends AnyVal
is removed from A
, it runs successfully. It also works if the enclosed type is an Int
instead of a BigInt
.
Scala version: 2.11.2
scala-async version: 0.9.2