diff options
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/scala/scala/async/internal/AsyncTransform.scala | 5 | ||||
-rw-r--r-- | src/main/scala/scala/async/internal/LiveVariables.scala | 3 |
2 files changed, 4 insertions, 4 deletions
diff --git a/src/main/scala/scala/async/internal/AsyncTransform.scala b/src/main/scala/scala/async/internal/AsyncTransform.scala index 18caea4..27d95a4 100644 --- a/src/main/scala/scala/async/internal/AsyncTransform.scala +++ b/src/main/scala/scala/async/internal/AsyncTransform.scala @@ -70,12 +70,11 @@ trait AsyncTransform { for ((state, flds) <- assignsOf) { val assigns = flds.map { fld => val fieldSym = fld.symbol - val zero = gen.mkZero(fieldSym.info) Block( List( - asyncBase.nullOut(global)(Expr[String](Literal(Constant(fieldSym.name.toString))), Expr[Any](zero)).tree + asyncBase.nullOut(global)(Expr[String](Literal(Constant(fieldSym.name.toString))), Expr[Any](Ident(fieldSym))).tree ), - Assign(gen.mkAttributedStableRef(fieldSym.owner.thisType, fieldSym), zero) + Assign(gen.mkAttributedStableRef(fieldSym.owner.thisType, fieldSym), gen.mkZero(fieldSym.info)) ) } val asyncState = asyncBlock.asyncStates.find(_.state == state).get diff --git a/src/main/scala/scala/async/internal/LiveVariables.scala b/src/main/scala/scala/async/internal/LiveVariables.scala index 48f03cd..0f95bca 100644 --- a/src/main/scala/scala/async/internal/LiveVariables.scala +++ b/src/main/scala/scala/async/internal/LiveVariables.scala @@ -49,10 +49,11 @@ trait LiveVariables { // determine which fields should be live also at the end (will not be nulled out) val noNull: Set[Symbol] = liftedSyms.filter { sym => - liftables.exists { tree => + sym.tpe.typeSymbol.isPrimitiveValueClass || liftables.exists { tree => !liftedSyms.contains(tree.symbol) && tree.exists(_.symbol == sym) } } + AsyncUtils.vprintln(s"fields never zero-ed out: ${noNull.mkString(", ")}") /** * Traverse statements of an `AsyncState`, collect `Ident`-s refering to lifted fields. |