From 0c14898bb78784b2984e3c7952993a1580b7d72c Mon Sep 17 00:00:00 2001 From: Som Snytt Date: Sun, 2 Jan 2022 19:22:03 -0800 Subject: [PATCH] LamdaLift tweak --- .../tools/nsc/transform/LambdaLift.scala | 37 ++++++++----------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/src/compiler/scala/tools/nsc/transform/LambdaLift.scala b/src/compiler/scala/tools/nsc/transform/LambdaLift.scala index 53c4870a5ad7..e4a8a10645e1 100644 --- a/src/compiler/scala/tools/nsc/transform/LambdaLift.scala +++ b/src/compiler/scala/tools/nsc/transform/LambdaLift.scala @@ -488,28 +488,23 @@ abstract class LambdaLift extends InfoTransform { if (sym.isLocalToBlock) liftDef(withFreeParams) else withFreeParams - case ValDef(mods, name, tpt, rhs) => - if (sym.isCapturedVariable) { - val tpt1 = TypeTree(sym.tpe) setPos tpt.pos - - val refTypeSym = sym.tpe.typeSymbol - - val factoryCall = typer.typedPos(rhs.pos) { - rhs match { - case EmptyTree => - val zeroMSym = refZeroMethod(refTypeSym) - gen.mkMethodCall(zeroMSym, Nil) - case arg => - val createMSym = refCreateMethod(refTypeSym) - gen.mkMethodCall(createMSym, arg :: Nil) - } + case ValDef(mods, name, tpt, rhs) if sym.isCapturedVariable => + val tpt1 = TypeTree(sym.tpe) setPos tpt.pos + val refTypeSym = sym.tpe.typeSymbol + val factoryCall = typer.typedPos(rhs.pos) { + rhs match { + case EmptyTree => + val zeroMSym = refZeroMethod(refTypeSym) + gen.mkMethodCall(zeroMSym, Nil) + case arg => + val createMSym = refCreateMethod(refTypeSym) + gen.mkMethodCall(createMSym, arg :: Nil) } - - if (settings.warnCaptured) - reporter.warning(tree.pos, s"Modification of variable $name within a closure causes it to be boxed.") - - treeCopy.ValDef(tree, mods, name, tpt1, factoryCall) - } else tree + } + if (settings.warnCaptured) + reporter.warning(tree.pos, s"Modification of variable $name within a closure causes it to be boxed.") + treeCopy.ValDef(tree, mods, name, tpt1, factoryCall) + case ValDef(_, _, _, _) => tree case Return(Block(stats, value)) => Block(stats, treeCopy.Return(tree, value)) setType tree.tpe setPos tree.pos case Return(expr) =>