diff options
Diffstat (limited to 'src/main/scala/scala')
-rw-r--r-- | src/main/scala/scala/async/internal/LiveVariables.scala | 2 | ||||
-rw-r--r-- | src/main/scala/scala/async/internal/TransformUtils.scala | 5 |
2 files changed, 4 insertions, 3 deletions
diff --git a/src/main/scala/scala/async/internal/LiveVariables.scala b/src/main/scala/scala/async/internal/LiveVariables.scala index 23063ba..79ba18e 100644 --- a/src/main/scala/scala/async/internal/LiveVariables.scala +++ b/src/main/scala/scala/async/internal/LiveVariables.scala @@ -56,7 +56,7 @@ trait LiveVariables { // determine which fields should be live also at the end (will not be nulled out) val noNull: Set[Symbol] = liftedSyms.filter { sym => - sym.tpe.typeSymbol.isPrimitiveValueClass || liftables.exists { tree => + sym.tpe.typeSymbol.isPrimitiveValueClass || sym.tpe.typeSymbol == definitions.NothingClass || liftables.exists { tree => !liftedSyms.contains(tree.symbol) && tree.exists(_.symbol == sym) } } diff --git a/src/main/scala/scala/async/internal/TransformUtils.scala b/src/main/scala/scala/async/internal/TransformUtils.scala index 0b8cd00..da76c18 100644 --- a/src/main/scala/scala/async/internal/TransformUtils.scala +++ b/src/main/scala/scala/async/internal/TransformUtils.scala @@ -259,10 +259,11 @@ private[async] trait TransformUtils { if (tp.typeSymbol.isDerivedValueClass) { val argZero = mkZero(tp.memberType(tp.typeSymbol.derivedValueClassUnbox).resultType) val target: Tree = gen.mkAttributedSelect( - typer.typedPos(macroPos)( + callSiteTyper.typedPos(macroPos)( New(TypeTree(tp.baseType(tp.typeSymbol)))), tp.typeSymbol.primaryConstructor) val zero = gen.mkMethodCall(target, argZero :: Nil) - gen.mkCast(zero, tp) + // restore the original type which we might otherwise have weakened with `baseType` above + callSiteTyper.typedPos(macroPos)(gen.mkCast(zero, tp)) } else { gen.mkZero(tp) } |