@@ -638,6 +638,139 @@ public void testTypeCheck_inlineAnnotations() {
638
638
TYPE_MISMATCH_WARNING );
639
639
}
640
640
641
+ public void testDestructuringNotInExprResult () {
642
+ test (
643
+ LINE_JOINER .join ("var x, a, b;" , "x = ([a,b] = [1,2])" ),
644
+ LINE_JOINER .join (
645
+ "var x,a,b;" ,
646
+ "x = (()=>{" ,
647
+ " let $jscomp$destructuring$var0 = [1,2];" ,
648
+ " var $jscomp$destructuring$var1 = $jscomp.makeIterator($jscomp$destructuring$var0);" ,
649
+ " a = $jscomp$destructuring$var1.next().value;" ,
650
+ " b = $jscomp$destructuring$var1.next().value;" ,
651
+ " return $jscomp$destructuring$var0;" ,
652
+ "})();" ));
653
+
654
+ test (
655
+ LINE_JOINER .join (
656
+ "var foo = function () {" , "var x, a, b;" , "x = ([a,b] = [1,2]);" , "}" , "foo();" ),
657
+ LINE_JOINER .join (
658
+ "var foo = function () {" ,
659
+ " var x, a, b;" ,
660
+ " x = (()=>{" ,
661
+ " let $jscomp$destructuring$var0 = [1,2];" ,
662
+ " var $jscomp$destructuring$var1 = $jscomp.makeIterator($jscomp$destructuring$var0);" ,
663
+ " a = $jscomp$destructuring$var1.next().value;" ,
664
+ " b = $jscomp$destructuring$var1.next().value;" ,
665
+ " return $jscomp$destructuring$var0;" ,
666
+ " })();" ,
667
+ "}" ,
668
+ "foo();" ));
669
+
670
+ test (
671
+ LINE_JOINER .join ("var prefix;" , "for (;;[, prefix] = /\\ .?([^.]+)$/.exec(prefix)){" , "}" ),
672
+ LINE_JOINER .join (
673
+ "var prefix;" ,
674
+ "for (;;(() => {" ,
675
+ " let $jscomp$destructuring$var0 = /\\ .?([^.]+)$/.exec(prefix)" ,
676
+ " var $jscomp$destructuring$var1 = " ,
677
+ "$jscomp.makeIterator($jscomp$destructuring$var0);" ,
678
+ " $jscomp$destructuring$var1.next();" ,
679
+ " prefix = $jscomp$destructuring$var1.next().value;" ,
680
+ " return $jscomp$destructuring$var0;" ,
681
+ " })()){" ,
682
+ "}" ));
683
+
684
+ test (
685
+ LINE_JOINER .join (
686
+ "var prefix;" ,
687
+ "for (;;[, prefix] = /\\ .?([^.]+)$/.exec(prefix)){" ,
688
+ " console.log(prefix);" ,
689
+ "}" ),
690
+ LINE_JOINER .join (
691
+ "var prefix;" ,
692
+ "for (;;(() => {" ,
693
+ " let $jscomp$destructuring$var0 = /\\ .?([^.]+)$/.exec(prefix)" ,
694
+ " var $jscomp$destructuring$var1 = " ,
695
+ "$jscomp.makeIterator($jscomp$destructuring$var0);" ,
696
+ " $jscomp$destructuring$var1.next();" ,
697
+ " prefix = $jscomp$destructuring$var1.next().value;" ,
698
+ " return $jscomp$destructuring$var0;" ,
699
+ " })()){" ,
700
+ " console.log(prefix);" ,
701
+ "}" ));
702
+
703
+ test (
704
+ LINE_JOINER .join ("for (var x = 1; x < 3; [x,] = [3,4]){" , " console.log(x);" , "}" ),
705
+ LINE_JOINER .join (
706
+ "for (var x = 1; x < 3; (()=>{" ,
707
+ " let $jscomp$destructuring$var0 = [3,4]" ,
708
+ " var $jscomp$destructuring$var1 = $jscomp.makeIterator($jscomp$destructuring$var0);" ,
709
+ " x = $jscomp$destructuring$var1.next().value;" ,
710
+ " return $jscomp$destructuring$var0;" ,
711
+ " })()){" ,
712
+ "console.log(x);" ,
713
+ "}" ));
714
+ }
715
+
716
+ public void testNestedDestructuring () {
717
+ test (
718
+ "var [[x]] = [[1]];" ,
719
+ LINE_JOINER .join (
720
+ "var $jscomp$destructuring$var0 = $jscomp.makeIterator([[1]]);" ,
721
+ "var $jscomp$destructuring$var1 = " ,
722
+ "$jscomp.makeIterator($jscomp$destructuring$var0.next().value);" ,
723
+ "var x = $jscomp$destructuring$var1.next().value;" ));
724
+
725
+ test (
726
+ "var [[x,y],[z]] = [[1,2],[3]];" ,
727
+ LINE_JOINER .join (
728
+ "var $jscomp$destructuring$var0 = $jscomp.makeIterator([[1,2],[3]]);" ,
729
+ "var $jscomp$destructuring$var1 = " ,
730
+ "$jscomp.makeIterator($jscomp$destructuring$var0.next().value);" ,
731
+ "var x = $jscomp$destructuring$var1.next().value;" ,
732
+ "var y = $jscomp$destructuring$var1.next().value;" ,
733
+ "var $jscomp$destructuring$var2 = " ,
734
+ "$jscomp.makeIterator($jscomp$destructuring$var0.next().value);" ,
735
+ "var z = $jscomp$destructuring$var2.next().value;" ));
736
+
737
+ test (
738
+ "var [[x,y],z] = [[1,2],3];" ,
739
+ LINE_JOINER .join (
740
+ "var $jscomp$destructuring$var0 = $jscomp.makeIterator([[1,2],3]);" ,
741
+ "var $jscomp$destructuring$var1 = " ,
742
+ "$jscomp.makeIterator($jscomp$destructuring$var0.next().value);" ,
743
+ "var x = $jscomp$destructuring$var1.next().value;" ,
744
+ "var y = $jscomp$destructuring$var1.next().value;" ,
745
+ "var z = $jscomp$destructuring$var0.next().value;" ));
746
+ }
747
+
748
+ public void testTryCatch () {
749
+ test (
750
+ LINE_JOINER .join ("var x = 1;" , "try {" , " throw [];" , "} catch ([x]) {}" ),
751
+ LINE_JOINER .join (
752
+ "var x = 1;" ,
753
+ "try {" ,
754
+ " throw [];" ,
755
+ "} catch ($jscomp$destructuring$var0) {" ,
756
+ " var $jscomp$destructuring$var1 = $jscomp.makeIterator($jscomp$destructuring$var0);" ,
757
+ " let x = $jscomp$destructuring$var1.next().value;" ,
758
+ "}" ));
759
+
760
+ test (
761
+ LINE_JOINER .join ("var x = 1;" , "try {" , " throw [[]];" , "} catch ([[x]]) {}" ),
762
+ LINE_JOINER .join (
763
+ "var x = 1;" ,
764
+ "try {" ,
765
+ " throw [[]];" ,
766
+ "} catch ($jscomp$destructuring$var0) {" ,
767
+ " var $jscomp$destructuring$var1 = $jscomp.makeIterator($jscomp$destructuring$var0);" ,
768
+ " var $jscomp$destructuring$var2 = " ,
769
+ "$jscomp.makeIterator($jscomp$destructuring$var1.next().value);" ,
770
+ " let x = $jscomp$destructuring$var2.next().value;" ,
771
+ "}" ));
772
+ }
773
+
641
774
@ Override
642
775
protected Compiler createCompiler () {
643
776
return new NoninjectingCompiler ();
0 commit comments