@@ -58,7 +58,6 @@ public final class ExpressionDecomposerTest {
58
58
public void setUp () {
59
59
allowMethodCallDecomposing = false ;
60
60
knownConstants .clear ();
61
- times = 1 ;
62
61
shouldTestTypes = true ;
63
62
}
64
63
@@ -650,7 +649,8 @@ public void exposeExpressionOptionalGetElem() {
650
649
lines (
651
650
"var temp$jscomp$1 = x;" ,
652
651
"if (temp$jscomp$1 != null) {" ,
653
- " var temp$jscomp$0 = temp$jscomp$1[foo()];" ,
652
+ " var temp_const$jscomp$2 = temp$jscomp$1;" ,
653
+ " var temp$jscomp$0 = temp_const$jscomp$2[foo()];" ,
654
654
"}" ,
655
655
"a = temp$jscomp$0" ));
656
656
}
@@ -663,7 +663,8 @@ public void exposeExpressionOptionalCallChain() {
663
663
lines (
664
664
"var temp$jscomp$1 = x;" ,
665
665
"if (temp$jscomp$1 != null) {" ,
666
- " var temp$jscomp$0 = temp$jscomp$1(a).y.z[foo()];" ,
666
+ " var temp_const$jscomp$2 = temp$jscomp$1(a).y.z;" ,
667
+ " var temp$jscomp$0 = temp_const$jscomp$2[foo()];" ,
667
668
"}" ,
668
669
"a = temp$jscomp$0" ));
669
670
}
@@ -676,7 +677,8 @@ public void exposeExpressionOptionalCallChainNoResult() {
676
677
lines (
677
678
"var temp$jscomp$0 = x;" ,
678
679
"if (temp$jscomp$0 != null) {" ,
679
- " temp$jscomp$0(a)[y].z[foo()];" ,
680
+ " var temp_const$jscomp$1 = temp$jscomp$0(a)[y].z;" ,
681
+ " temp_const$jscomp$1[foo()];" ,
680
682
"}" ));
681
683
}
682
684
@@ -688,7 +690,8 @@ public void exposeExpressionOptionalGetPropChain() {
688
690
lines (
689
691
"var temp$jscomp$1 = x;" ,
690
692
"if (temp$jscomp$1 != null) {" ,
691
- " var temp$jscomp$0 = temp$jscomp$1.y.z[foo()];" ,
693
+ " var temp_const$jscomp$2 = temp$jscomp$1.y.z;" ,
694
+ " var temp$jscomp$0 = temp_const$jscomp$2[foo()];" ,
692
695
"}" ,
693
696
"a = temp$jscomp$0" ));
694
697
}
@@ -701,19 +704,21 @@ public void exposeExpressionOptionalGetPropChainNoResult() {
701
704
lines (
702
705
"var temp$jscomp$0 = x;" ,
703
706
"if (temp$jscomp$0 != null) {" ,
704
- " temp$jscomp$0.y.z[foo()];" ,
707
+ " var temp_const$jscomp$1 = temp$jscomp$0.y.z;" ,
708
+ " temp_const$jscomp$1[foo()];" ,
705
709
"}" ));
706
710
}
707
711
708
712
@ Test
709
713
public void exposeExpressionOptionalGetElemChain () {
710
714
helperExposeExpression (
711
- "a = x?.[y].z[foo()]" ,
715
+ "a = x?.[y].z[foo()]; " ,
712
716
"foo" ,
713
717
lines (
714
718
"var temp$jscomp$1 = x;" ,
715
719
"if (temp$jscomp$1 != null) {" ,
716
- " var temp$jscomp$0 = temp$jscomp$1[y].z[foo()];" ,
720
+ " var temp_const$jscomp$2 = temp$jscomp$1[y].z;" ,
721
+ " var temp$jscomp$0 = temp_const$jscomp$2[foo()];" ,
717
722
"}" ,
718
723
"a = temp$jscomp$0" ));
719
724
}
@@ -726,7 +731,8 @@ public void exposeExpressionOptionalGetElemChainNoResult() {
726
731
lines (
727
732
"var temp$jscomp$0 = x;" ,
728
733
"if (temp$jscomp$0 != null) {" ,
729
- " temp$jscomp$0[y].z[foo()];" ,
734
+ " var temp_const$jscomp$1 = temp$jscomp$0[y].z;" ,
735
+ " temp_const$jscomp$1[foo()];" ,
730
736
"}" ));
731
737
}
732
738
@@ -739,7 +745,9 @@ public void exposeExpressionOptionalGetElemWithCall() {
739
745
lines (
740
746
"var temp$jscomp$1 = x.y;" ,
741
747
"if (temp$jscomp$1 != null) {" ,
742
- " var temp$jscomp$0 = temp$jscomp$1[z](foo())" ,
748
+ " var temp_const$jscomp$3 = temp$jscomp$1;" ,
749
+ " var temp_const$jscomp$2 = temp_const$jscomp$3[z];" ,
750
+ " var temp$jscomp$0 = temp_const$jscomp$2.call(temp_const$jscomp$3, foo());" ,
743
751
"}" ,
744
752
"a = temp$jscomp$0" ));
745
753
}
@@ -754,7 +762,9 @@ public void exposeExpressionOptionalGetElemWithCallTwiceRewriteCall() {
754
762
lines (
755
763
"var temp$jscomp$1 = x.y;" ,
756
764
"if (temp$jscomp$1 != null) {" ,
757
- " var temp$jscomp$0 = temp$jscomp$1[z](foo())" ,
765
+ " var temp_const$jscomp$3 = temp$jscomp$1;" ,
766
+ " var temp_const$jscomp$2 = temp_const$jscomp$3[z];" ,
767
+ " var temp$jscomp$0 = temp_const$jscomp$2.call(temp_const$jscomp$3, foo());" ,
758
768
"}" ,
759
769
"a = temp$jscomp$0" );
760
770
String secondTimeExpose =
@@ -769,7 +779,6 @@ public void exposeExpressionOptionalGetElemWithCallTwiceRewriteCall() {
769
779
770
780
helperExposeExpression (originalSource , "foo" , firstTimeExpose );
771
781
772
- times = 2 ;
773
782
helperExposeExpression (originalSource , "foo" , secondTimeExpose );
774
783
}
775
784
@@ -783,7 +792,11 @@ public void exposeExpressionGetElemWithOptionalCall() {
783
792
"var temp$jscomp$2 = x.y;" ,
784
793
"var temp$jscomp$1 = temp$jscomp$2[z];" ,
785
794
"if(temp$jscomp$1 != null) {" ,
786
- " var temp$jscomp$0 = temp$jscomp$1.call(temp$jscomp$2, foo(), d);" ,
795
+ " var temp_const$jscomp$5 = temp$jscomp$1;" ,
796
+ " var temp_const$jscomp$4 = temp_const$jscomp$5.call;" ,
797
+ " var temp_const$jscomp$3 = temp$jscomp$2;" ,
798
+ " var temp$jscomp$0 = " ,
799
+ " temp_const$jscomp$4.call(temp_const$jscomp$5, temp_const$jscomp$3, foo(), d);" ,
787
800
"}" ,
788
801
"a = temp$jscomp$0" ));
789
802
}
@@ -797,7 +810,9 @@ public void exposeExpressionOptionalGetPropWithCall() {
797
810
lines (
798
811
"var temp$jscomp$1 = x.y;" ,
799
812
"if (temp$jscomp$1 != null) {" ,
800
- " var temp$jscomp$0 = temp$jscomp$1.z(foo(1));" ,
813
+ " var temp_const$jscomp$3 = temp$jscomp$1;" ,
814
+ " var temp_const$jscomp$2 = temp_const$jscomp$3.z;" ,
815
+ " var temp$jscomp$0 = temp_const$jscomp$2.call(temp_const$jscomp$3, foo(1));" ,
801
816
"}" ,
802
817
"a = temp$jscomp$0" ));
803
818
}
@@ -806,29 +821,17 @@ public void exposeExpressionOptionalGetPropWithCall() {
806
821
public void exposeExpressionOptionalGetPropWithCallTwiceRewriteCall () {
807
822
allowMethodCallDecomposing = true ;
808
823
809
- // 2 calls to exposeExpression() are needed to get full exposure
810
- String originalSource = "a = x.y?.z(foo(1))" ;
811
- String firstTimeExpose =
812
- lines (
813
- "var temp$jscomp$1 = x.y;" ,
814
- "if (temp$jscomp$1 != null) {" ,
815
- " var temp$jscomp$0 = temp$jscomp$1.z(foo(1));" ,
816
- "}" ,
817
- "a = temp$jscomp$0" );
818
- String secondTimeExpose =
824
+ helperExposeExpression (
825
+ "a = x.y?.z(foo(1))" ,
826
+ "foo" ,
819
827
lines (
820
828
"var temp$jscomp$1 = x.y;" ,
821
829
"if (temp$jscomp$1 != null) {" ,
822
830
" var temp_const$jscomp$3 = temp$jscomp$1;" ,
823
831
" var temp_const$jscomp$2 = temp_const$jscomp$3.z;" ,
824
832
" var temp$jscomp$0 = temp_const$jscomp$2.call(temp_const$jscomp$3, foo(1));" ,
825
833
"}" ,
826
- "a = temp$jscomp$0" );
827
-
828
- helperExposeExpression (originalSource , "foo" , firstTimeExpose );
829
-
830
- times = 2 ;
831
- helperExposeExpression (originalSource , "foo" , secondTimeExpose );
834
+ "a = temp$jscomp$0" ));
832
835
}
833
836
834
837
@ Test
@@ -841,7 +844,11 @@ public void exposeExpressionGetPropWithOptionalCall() {
841
844
"var temp$jscomp$2 = x.y;" ,
842
845
"var temp$jscomp$1 = temp$jscomp$2.z;" ,
843
846
"if (temp$jscomp$1 != null) {" ,
844
- " var temp$jscomp$0 = temp$jscomp$1.call(temp$jscomp$2, foo())" ,
847
+ " var temp_const$jscomp$5 = temp$jscomp$1;" ,
848
+ " var temp_const$jscomp$4 = temp_const$jscomp$5.call;" ,
849
+ " var temp_const$jscomp$3 = temp$jscomp$2;" ,
850
+ " var temp$jscomp$0 =" ,
851
+ " temp_const$jscomp$4.call(temp_const$jscomp$5, temp_const$jscomp$3, foo());" ,
845
852
"}" ,
846
853
"a = temp$jscomp$0" ));
847
854
}
@@ -855,7 +862,9 @@ public void exposeExpressionNewOptChainAfterRewriteCall() {
855
862
lines (
856
863
"var temp$jscomp$1 = x;" ,
857
864
"if (temp$jscomp$1 != null) {" ,
858
- " var temp$jscomp$0 = temp$jscomp$1.y(foo())" ,
865
+ " var temp_const$jscomp$3 = temp$jscomp$1;" ,
866
+ " var temp_const$jscomp$2 = temp_const$jscomp$3.y;" ,
867
+ " var temp$jscomp$0 = temp_const$jscomp$2.call(temp_const$jscomp$3, foo());" ,
859
868
"}" ,
860
869
"a = temp$jscomp$0?.z.q" ));
861
870
}
@@ -869,7 +878,8 @@ public void exposeExpressionNewOptChainAfter() {
869
878
lines (
870
879
"var temp$jscomp$1 = x;" ,
871
880
"if (temp$jscomp$1 != null) {" ,
872
- " var temp$jscomp$0 = temp$jscomp$1.y[foo()]" ,
881
+ " var temp_const$jscomp$2 = temp$jscomp$1.y;" ,
882
+ " var temp$jscomp$0 = temp_const$jscomp$2[foo()];" ,
873
883
"}" ,
874
884
"a = temp$jscomp$0?.z.q" ));
875
885
}
@@ -883,7 +893,8 @@ public void exposeExpressionNotImmediatelyFollowedByNewChain() {
883
893
lines (
884
894
"var temp$jscomp$1 = x;" ,
885
895
"if (temp$jscomp$1 != null) {" ,
886
- " var temp$jscomp$0 = temp$jscomp$1.y[foo()].z.q" ,
896
+ " var temp_const$jscomp$2 = temp$jscomp$1.y;" ,
897
+ " var temp$jscomp$0 = temp_const$jscomp$2[foo()].z.q;" ,
887
898
"}" ,
888
899
"a = temp$jscomp$0?.b.c" ));
889
900
}
@@ -897,7 +908,8 @@ public void exposeExpressionBreakingOutOfOptionalChain() {
897
908
lines (
898
909
"var temp$jscomp$1 = x;" ,
899
910
"if (temp$jscomp$1 != null) {" ,
900
- " var temp$jscomp$0 = temp$jscomp$1.y[foo()]" ,
911
+ " var temp_const$jscomp$2 = temp$jscomp$1.y;" ,
912
+ " var temp$jscomp$0 = temp_const$jscomp$2[foo()];" ,
901
913
"}" ,
902
914
"a = temp$jscomp$0.z.q" ));
903
915
}
@@ -911,7 +923,9 @@ public void exposeExpressionAfterTwoOptionalChains() {
911
923
lines (
912
924
"var temp$jscomp$1 = x?.y.z;" ,
913
925
"if (temp$jscomp$1 != null) {" ,
914
- " var temp$jscomp$0 = temp$jscomp$1.q(foo());" ,
926
+ " var temp_const$jscomp$3 = temp$jscomp$1;" ,
927
+ " var temp_const$jscomp$2 = temp_const$jscomp$3.q;" ,
928
+ " var temp$jscomp$0 = temp_const$jscomp$2.call(temp_const$jscomp$3, foo());" ,
915
929
"}" ,
916
930
"a = temp$jscomp$0" ));
917
931
}
@@ -1227,11 +1241,6 @@ public void testExposeYieldExpression3() {
1227
1241
" return temp_const$jscomp$0.call(temp_const$jscomp$1, yield 1);" ,
1228
1242
"}" );
1229
1243
helperExposeExpression (before , "yield" , after );
1230
-
1231
- // Check that we don't decompose again, which would result in an infinite loop when inlining
1232
- // functions.
1233
- times = 2 ;
1234
- helperExposeExpression (before , "yield" , after );
1235
1244
}
1236
1245
1237
1246
@ Test
@@ -1532,7 +1541,6 @@ public void testMoveSuperCall_noSideEffects() {
1532
1541
1533
1542
@ Test
1534
1543
public void testExposeSuperCall () {
1535
- times = 2 ;
1536
1544
helperExposeExpression (
1537
1545
"class A { constructor() { super(goo(), foo()) } }" ,
1538
1546
"foo" ,
@@ -1545,7 +1553,6 @@ public void testExposeSuperCall() {
1545
1553
1546
1554
@ Test
1547
1555
public void testExposeSuperCall_noSideEffects () {
1548
- times = 2 ;
1549
1556
// String() is being used since it's known to not have side-effects.
1550
1557
helperExposeExpression (
1551
1558
"class A { constructor() { super(goo(), String()) } }" ,
@@ -1626,9 +1633,7 @@ private Node helperExposeExpressionThenTypeCheck(String code, Function<Node, Nod
1626
1633
Node expr = nodeFinder .apply (tree );
1627
1634
1628
1635
compiler .resetUniqueNameId ();
1629
- for (int i = 0 ; i < times ; i ++) {
1630
- decomposer .exposeExpression (expr );
1631
- }
1636
+ decomposer .maybeExposeExpression (expr );
1632
1637
processForTypecheck (compiler , tree );
1633
1638
1634
1639
return tree ;
@@ -1665,9 +1670,7 @@ private void helperExposeExpression(
1665
1670
assertThat (result ).isEqualTo (DecompositionType .DECOMPOSABLE );
1666
1671
1667
1672
compiler .resetUniqueNameId ();
1668
- for (int i = 0 ; i < times ; i ++) {
1669
- decomposer .exposeExpression (expr );
1670
- }
1673
+ decomposer .maybeExposeExpression (expr );
1671
1674
validateSourceInfo (compiler , tree );
1672
1675
assertNode (tree ).usingSerializer (compiler ::toSource ).isEqualTo (expectedRoot );
1673
1676
@@ -1713,9 +1716,7 @@ private void helperMoveExpression(
1713
1716
assertWithMessage ("Expected node was not found." ).that (expr ).isNotNull ();
1714
1717
1715
1718
compiler .resetUniqueNameId ();
1716
- for (int i = 0 ; i < times ; i ++) {
1717
- decomposer .moveExpression (expr );
1718
- }
1719
+ decomposer .moveExpression (expr );
1719
1720
validateSourceInfo (compiler , tree );
1720
1721
assertNode (tree ).usingSerializer (compiler ::toSource ).isEqualTo (expectedRoot );
1721
1722
@@ -1724,9 +1725,7 @@ private void helperMoveExpression(
1724
1725
Node originalExpr = nodeFinder .apply (originalTree );
1725
1726
1726
1727
compiler .resetUniqueNameId ();
1727
- for (int i = 0 ; i < times ; i ++) {
1728
- decomposer .moveExpression (originalExpr );
1729
- }
1728
+ decomposer .moveExpression (originalExpr );
1730
1729
processForTypecheck (compiler , originalTree );
1731
1730
1732
1731
// TODO(bradfordcsmith): Don't assume type check + decompose gives the same results as
0 commit comments