File tree Expand file tree Collapse file tree 2 files changed +15
-16
lines changed
src/dotty/tools/dotc/transform
test/dotty/tools/backend/jvm Expand file tree Collapse file tree 2 files changed +15
-16
lines changed Original file line number Diff line number Diff line change @@ -349,10 +349,13 @@ class TailRec extends MiniPhase {
349
349
yield
350
350
(getVarForRewrittenParam(param), arg)
351
351
352
- val assignThisAndParamPairs =
353
- if (prefix eq EmptyTree ) assignParamPairs
354
- else
355
- // TODO Opt: also avoid assigning `this` if the prefix is `this.`
352
+ val assignThisAndParamPairs = prefix match
353
+ case EmptyTree =>
354
+ assignParamPairs
355
+ case prefix : This if prefix.symbol == enclosingClass =>
356
+ // Avoid assigning `this = this`
357
+ assignParamPairs
358
+ case _ =>
356
359
(getVarForRewrittenThis(), noTailTransform(prefix)) :: assignParamPairs
357
360
358
361
val assignments = assignThisAndParamPairs match {
Original file line number Diff line number Diff line change @@ -976,28 +976,24 @@ class TestBCode extends DottyBytecodeTest {
976
976
Op (ICONST_0 ),
977
977
Jump (IF_ICMPNE , Label (7 )),
978
978
VarOp (ILOAD , 2 ),
979
- Jump (GOTO , Label (26 )),
979
+ Jump (GOTO , Label (22 )),
980
980
Label (7 ),
981
- VarOp (ALOAD , 0 ),
982
- VarOp (ASTORE , 3 ),
983
981
VarOp (ILOAD , 1 ),
984
982
Op (ICONST_1 ),
985
983
Op (ISUB ),
986
- VarOp (ISTORE , 4 ),
984
+ VarOp (ISTORE , 3 ),
987
985
VarOp (ILOAD , 2 ),
988
986
VarOp (ILOAD , 1 ),
989
987
Op (IMUL ),
990
- VarOp (ISTORE , 5 ),
991
- VarOp (ALOAD , 3 ),
992
- VarOp (ASTORE , 0 ),
993
- VarOp (ILOAD , 4 ),
988
+ VarOp (ISTORE , 4 ),
989
+ VarOp (ILOAD , 3 ),
994
990
VarOp (ISTORE , 1 ),
995
- VarOp (ILOAD , 5 ),
991
+ VarOp (ILOAD , 4 ),
996
992
VarOp (ISTORE , 2 ),
997
- Jump (GOTO , Label (29 )),
998
- Label (26 ),
993
+ Jump (GOTO , Label (25 )),
994
+ Label (22 ),
999
995
Op (IRETURN ),
1000
- Label (29 ),
996
+ Label (25 ),
1001
997
Jump (GOTO , Label (0 )),
1002
998
Op (NOP ),
1003
999
Op (ATHROW ),
You can’t perform that action at this time.
0 commit comments