@@ -452,6 +452,8 @@ abstract class UnCurry extends InfoTransform
452
452
}
453
453
}
454
454
455
+ def isNonLocalReturn (ret : Return ) = ret.symbol != currentOwner.enclMethod || currentOwner.isLazy
456
+
455
457
// ------ The tree transformers --------------------------------------------------------
456
458
457
459
def mainTransform (tree : Tree ): Tree = {
@@ -551,8 +553,8 @@ abstract class UnCurry extends InfoTransform
551
553
case Assign (lhs, _) if lhs.symbol.owner != currentMethod || lhs.symbol.hasFlag(LAZY | ACCESSOR ) =>
552
554
withNeedLift(true ) { super .transform(tree) }
553
555
554
- case Return (_) =>
555
- withNeedLift(true ) { super .transform(tree ) }
556
+ case ret @ Return (_) if (isNonLocalReturn(ret) ) =>
557
+ withNeedLift(true ) { super .transform(ret ) }
556
558
557
559
case Try (block, catches, finalizer) =>
558
560
if (needTryLift || shouldBeLiftedAnyway(tree)) transform(liftTree(tree))
@@ -659,9 +661,9 @@ abstract class UnCurry extends InfoTransform
659
661
applyUnary()
660
662
case Select (_, _) | TypeApply (_, _) =>
661
663
applyUnary()
662
- case Return (expr) if (tree.symbol != currentOwner.enclMethod || currentOwner.isLazy ) =>
663
- debuglog(" non local return in " + tree .symbol+ " from " + currentOwner.enclMethod)
664
- atPos(tree .pos)(nonLocalReturnThrow(expr, tree .symbol))
664
+ case ret @ Return (expr) if (isNonLocalReturn(ret) ) =>
665
+ debuglog(" non local return in " + ret .symbol+ " from " + currentOwner.enclMethod)
666
+ atPos(ret .pos)(nonLocalReturnThrow(expr, ret .symbol))
665
667
case TypeTree () =>
666
668
tree
667
669
case _ =>
0 commit comments