aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/scala/async
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/scala/async')
-rw-r--r--src/main/scala/scala/async/internal/LiveVariables.scala2
-rw-r--r--src/main/scala/scala/async/internal/TransformUtils.scala5
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)
}