Skip to content

Commit 103ce90

Browse files
committed
Removed mkZero calls to fix #86
1 parent 0f8ea5c commit 103ce90

File tree

3 files changed

+34
-3
lines changed

3 files changed

+34
-3
lines changed

src/main/scala/scala/async/internal/AnfTransform.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ private[async] trait AnfTransform {
102102

103103
private def defineVar(prefix: String, tp: Type, pos: Position): ValDef = {
104104
val sym = api.currentOwner.newTermSymbol(name.fresh(prefix), pos, MUTABLE | SYNTHETIC).setInfo(uncheckedBounds(tp))
105-
valDef(sym, gen.mkZero(uncheckedBounds(tp))).setType(NoType).setPos(pos)
105+
valDef(sym, EmptyTree).setType(NoType).setPos(pos)
106106
}
107107
}
108108

src/main/scala/scala/async/internal/AsyncTransform.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ trait AsyncTransform {
8181
List(
8282
asyncBase.nullOut(c.universe)(c.Expr[String](Literal(Constant(fieldSym.name.toString))), c.Expr[Any](Ident(fieldSym))).tree
8383
),
84-
Assign(gen.mkAttributedStableRef(thisType(fieldSym.owner), fieldSym), gen.mkZero(fieldSym.info))
84+
Assign(gen.mkAttributedStableRef(thisType(fieldSym.owner), fieldSym), EmptyTree)
8585
)
8686
}
8787
val asyncState = asyncBlock.asyncStates.find(_.state == state).get

src/test/scala/scala/async/run/toughtype/ToughType.scala

+32-1
Original file line numberDiff line numberDiff line change
@@ -239,9 +239,40 @@ class ToughTypeSpec {
239239
val result = Await.result(f, 5.seconds)
240240
result mustEqual (new IntWrapper("foo"))
241241
}
242+
243+
@Test def ticket86NestedValueClass() {
244+
import ExecutionContext.Implicits.global
245+
246+
val f = async {
247+
val a = Future.successful(new IntWrapper("42"))
248+
await(await(a).plusStr)
249+
}
250+
val result = Await.result(f, 5.seconds)
251+
result mustEqual "42!"
252+
}
253+
254+
@Test def ticket86MatchedValueClass(): Unit = {
255+
import ExecutionContext.Implicits.global
256+
257+
def doAThing(param: IntWrapper) = Future(None)
258+
259+
val fut = async {
260+
Option(new IntWrapper("value!")) match {
261+
case Some(valueHolder) =>
262+
await(doAThing(valueHolder))
263+
case None =>
264+
None
265+
}
266+
}
267+
268+
val result = Await.result(fut, 5.seconds)
269+
result mustBe None
270+
}
242271
}
243272

244-
class IntWrapper(val value: String) extends AnyVal
273+
class IntWrapper(val value: String) extends AnyVal {
274+
def plusStr = Future.successful(value + "!")
275+
}
245276

246277

247278
trait A

0 commit comments

Comments
 (0)