Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(510)

Side by Side Diff: test/mjsunit/harmony/destructuring.js

Issue 1281163002: [parser] partially revert "use-strict directives in function body affect init block" Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « test/mjsunit/harmony/arrow-rest-params.js ('k') | test/mjsunit/harmony/rest-params.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4 //
5 // Flags: --harmony-destructuring 5 // Flags: --harmony-destructuring
6 // Flags: --harmony-arrow-functions --harmony-rest-parameters 6 // Flags: --harmony-arrow-functions --harmony-rest-parameters
7 7
8 (function TestObjectLiteralPattern() { 8 (function TestObjectLiteralPattern() {
9 var { x : x, y : y } = { x : 1, y : 2 }; 9 var { x : x, y : y } = { x : 1, y : 2 };
10 assertEquals(1, x); 10 assertEquals(1, x);
(...skipping 722 matching lines...) Expand 10 before | Expand all | Expand 10 after
733 })(); 733 })();
734 734
735 735
736 (function TestParameterScoping() { 736 (function TestParameterScoping() {
737 var x = 1; 737 var x = 1;
738 738
739 function f1({a = x}) { var x = 2; return a; } 739 function f1({a = x}) { var x = 2; return a; }
740 assertEquals(1, f1({})); 740 assertEquals(1, f1({}));
741 function f2({a = x}) { function x() {}; return a; } 741 function f2({a = x}) { function x() {}; return a; }
742 assertEquals(1, f2({})); 742 assertEquals(1, f2({}));
743 function f3({a = x}) { 'use strict'; let x = 2; return a; } 743 (function() {
744 assertEquals(1, f3({})); 744 'use strict';
745 function f4({a = x}) { 'use strict'; const x = 2; return a; } 745 function f3({a = x}) { let x = 2; return a; }
746 assertEquals(1, f4({})); 746 assertEquals(1, f3({}));
747 function f5({a = x}) { 'use strict'; function x() {}; return a; } 747 function f4({a = x}) { const x = 2; return a; }
748 assertEquals(1, f5({})); 748 assertEquals(1, f4({}));
749 function f5({a = x}) { function x() {}; return a; }
750 assertEquals(1, f5({}));
751 });
749 function f6({a = eval("x")}) { var x; return a; } 752 function f6({a = eval("x")}) { var x; return a; }
750 assertEquals(1, f6({})); 753 assertEquals(1, f6({}));
751 function f61({a = eval("x")}) { 'use strict'; var x; return a; } 754 (function() {
752 assertEquals(1, f61({})); 755 'use strict';
756 function f61({a = eval("x")}) { var x; return a; }
757 assertEquals(1, f61({}));
758 });
753 function f62({a = eval("'use strict'; x")}) { var x; return a; } 759 function f62({a = eval("'use strict'; x")}) { var x; return a; }
754 assertEquals(1, f62({})); 760 assertEquals(1, f62({}));
755 function f7({a = function() { return x }}) { var x; return a(); } 761 function f7({a = function() { return x }}) { var x; return a(); }
756 assertEquals(1, f7({})); 762 assertEquals(1, f7({}));
757 function f8({a = () => x}) { var x; return a(); } 763 function f8({a = () => x}) { var x; return a(); }
758 assertEquals(1, f8({})); 764 assertEquals(1, f8({}));
759 function f9({a = () => eval("x")}) { var x; return a(); } 765 function f9({a = () => eval("x")}) { var x; return a(); }
760 assertEquals(1, f9({})); 766 assertEquals(1, f9({}));
761 function f91({a = () => eval("x")}) { 'use strict'; var x; return a(); } 767 (function TestInitializedWithEvalArrowStrict() {
762 assertEquals(1, f91({})); 768 'use strict';
769 function f91({a = () => eval("x")}) { var x; return a(); }
770 assertEquals(1, f91({}));
771 })();
763 function f92({a = () => { 'use strict'; return eval("x") }}) { var x; return a (); } 772 function f92({a = () => { 'use strict'; return eval("x") }}) { var x; return a (); }
764 assertEquals(1, f92({})); 773 assertEquals(1, f92({}));
765 function f93({a = () => eval("'use strict'; x")}) { var x; return a(); } 774 function f93({a = () => eval("'use strict'; x")}) { var x; return a(); }
766 assertEquals(1, f93({})); 775 assertEquals(1, f93({}));
767 776
768 var g1 = ({a = x}) => { var x = 2; return a; }; 777 var g1 = ({a = x}) => { var x = 2; return a; };
769 assertEquals(1, g1({})); 778 assertEquals(1, g1({}));
770 var g2 = ({a = x}) => { function x() {}; return a; }; 779 var g2 = ({a = x}) => { function x() {}; return a; };
771 assertEquals(1, g2({})); 780 assertEquals(1, g2({}));
772 var g3 = ({a = x}) => { 'use strict'; let x = 2; return a; }; 781 (function() {
773 assertEquals(1, g3({})); 782 'use strict';
774 var g4 = ({a = x}) => { 'use strict'; const x = 2; return a; }; 783 var g3 = ({a = x}) => { let x = 2; return a; };
775 assertEquals(1, g4({})); 784 assertEquals(1, g3({}));
776 var g5 = ({a = x}) => { 'use strict'; function x() {}; return a; }; 785 var g4 = ({a = x}) => { const x = 2; return a; };
777 assertEquals(1, g5({})); 786 assertEquals(1, g4({}));
787 var g5 = ({a = x}) => { function x() {}; return a; };
788 assertEquals(1, g5({}));
789 });
778 var g6 = ({a = eval("x")}) => { var x; return a; }; 790 var g6 = ({a = eval("x")}) => { var x; return a; };
779 assertEquals(1, g6({})); 791 assertEquals(1, g6({}));
780 var g61 = ({a = eval("x")}) => { 'use strict'; var x; return a; }; 792 (function() {
781 assertEquals(1, g61({})); 793 'use strict';
794 var g61 = ({a = eval("x")}) => { var x; return a; };
795 assertEquals(1, g61({}));
796 })();
782 var g62 = ({a = eval("'use strict'; x")}) => { var x; return a; }; 797 var g62 = ({a = eval("'use strict'; x")}) => { var x; return a; };
783 assertEquals(1, g62({})); 798 assertEquals(1, g62({}));
784 var g7 = ({a = function() { return x }}) => { var x; return a(); }; 799 var g7 = ({a = function() { return x }}) => { var x; return a(); };
785 assertEquals(1, g7({})); 800 assertEquals(1, g7({}));
786 var g8 = ({a = () => x}) => { var x; return a(); }; 801 var g8 = ({a = () => x}) => { var x; return a(); };
787 assertEquals(1, g8({})); 802 assertEquals(1, g8({}));
788 var g9 = ({a = () => eval("x")}) => { var x; return a(); }; 803 var g9 = ({a = () => eval("x")}) => { var x; return a(); };
789 assertEquals(1, g9({})); 804 assertEquals(1, g9({}));
790 var g91 = ({a = () => eval("x")}) => { 'use strict'; var x; return a(); }; 805 (function() {
791 assertEquals(1, g91({})); 806 'use strict';
792 var g92 = ({a = () => { 'use strict'; return eval("x") }}) => { var x; return a(); }; 807 var g91 = ({a = () => eval("x")}) => { var x; return a(); };
793 assertEquals(1, g92({})); 808 assertEquals(1, g91({}));
809 var g92 = ({a = () => { return eval("x") }}) => { var x; return a(); };
810 assertEquals(1, g92({}));
811 })();
794 var g93 = ({a = () => eval("'use strict'; x")}) => { var x; return a(); }; 812 var g93 = ({a = () => eval("'use strict'; x")}) => { var x; return a(); };
795 assertEquals(1, g93({})); 813 assertEquals(1, g93({}));
796 814
797 var f11 = function f({x = f}) { var f; return x; } 815 var f11 = function f({x = f}) { var f; return x; }
798 assertSame(f11, f11({})); 816 assertSame(f11, f11({}));
799 var f12 = function f({x = f}) { function f() {}; return x; } 817 var f12 = function f({x = f}) { function f() {}; return x; }
800 assertSame(f12, f12({})); 818 assertSame(f12, f12({}));
801 var f13 = function f({x = f}) { 'use strict'; let f; return x; } 819 (function() {
802 assertSame(f13, f13({})); 820 'use strict';
803 var f14 = function f({x = f}) { 'use strict'; const f = 0; return x; } 821 var f13 = function f({x = f}) { let f; return x; }
804 assertSame(f14, f14({})); 822 assertSame(f13, f13({}));
805 var f15 = function f({x = f}) { 'use strict'; function f() {}; return x; } 823 var f14 = function f({x = f}) { const f = 0; return x; }
806 assertSame(f15, f15({})); 824 assertSame(f14, f14({}));
825 var f15 = function f({x = f}) { function f() {}; return x; }
826 assertSame(f15, f15({}));
827 })();
807 var f16 = function f({f = 7, x = f}) { return x; } 828 var f16 = function f({f = 7, x = f}) { return x; }
808 assertSame(7, f16({})); 829 assertSame(7, f16({}));
809 830
810 var y = 'a'; 831 var y = 'a';
811 function f20({[y]: x}) { var y = 'b'; return x; } 832 function f20({[y]: x}) { var y = 'b'; return x; }
812 assertEquals(1, f20({a: 1, b: 2})); 833 assertEquals(1, f20({a: 1, b: 2}));
813 function f21({[eval('y')]: x}) { var y = 'b'; return x; } 834 function f21({[eval('y')]: x}) { var y = 'b'; return x; }
814 assertEquals(1, f21({a: 1, b: 2})); 835 assertEquals(1, f21({a: 1, b: 2}));
815 var g20 = ({[y]: x}) => { var y = 'b'; return x; }; 836 var g20 = ({[y]: x}) => { var y = 'b'; return x; };
816 assertEquals(1, g20({a: 1, b: 2})); 837 assertEquals(1, g20({a: 1, b: 2}));
817 var g21 = ({[eval('y')]: x}) => { var y = 'b'; return x; }; 838 var g21 = ({[eval('y')]: x}) => { var y = 'b'; return x; };
818 assertEquals(1, g21({a: 1, b: 2})); 839 assertEquals(1, g21({a: 1, b: 2}));
819 })(); 840 })();
820 841
821 842
822 (function TestParameterTDZ() { 843 (function TestParameterTDZ() {
823 function f1({a = x}, x) { return a } 844 function f1({a = x}, x) { return a }
824 assertThrows(() => f1({}, 4), ReferenceError); 845 assertThrows(() => f1({}, 4), ReferenceError);
825 assertEquals(4, f1({a: 4}, 5)); 846 assertEquals(4, f1({a: 4}, 5));
826 function f2({a = eval("x")}, x) { return a } 847 function f2({a = eval("x")}, x) { return a }
827 assertThrows(() => f2({}, 4), ReferenceError); 848 assertThrows(() => f2({}, 4), ReferenceError);
828 assertEquals(4, f2({a: 4}, 5)); 849 assertEquals(4, f2({a: 4}, 5));
829 function f3({a = eval("x")}, x) { 'use strict'; return a } 850 (function() {
830 assertThrows(() => f3({}, 4), ReferenceError); 851 'use strict';
831 assertEquals(4, f3({a: 4}, 5)); 852 function f3({a = eval("x")}, x) { return a }
853 assertThrows(() => f3({}, 4), ReferenceError);
854 assertEquals(4, f3({a: 4}, 5));
855 })();
832 function f4({a = eval("'use strict'; x")}, x) { return a } 856 function f4({a = eval("'use strict'; x")}, x) { return a }
833 assertThrows(() => f4({}, 4), ReferenceError); 857 assertThrows(() => f4({}, 4), ReferenceError);
834 assertEquals(4, f4({a: 4}, 5)); 858 assertEquals(4, f4({a: 4}, 5));
835 859
836 function f5({a = () => x}, x) { return a() } 860 function f5({a = () => x}, x) { return a() }
837 assertEquals(4, f5({a: () => 4}, 5)); 861 assertEquals(4, f5({a: () => 4}, 5));
838 function f6({a = () => eval("x")}, x) { return a() } 862 function f6({a = () => eval("x")}, x) { return a() }
839 assertEquals(4, f6({a: () => 4}, 5)); 863 assertEquals(4, f6({a: () => 4}, 5));
840 function f7({a = () => eval("x")}, x) { 'use strict'; return a() } 864 (function() {
841 assertEquals(4, f7({a: () => 4}, 5)); 865 'use strict';
866 function f7({a = () => eval("x")}, x) { return a() }
867 assertEquals(4, f7({a: () => 4}, 5));
868 })();
842 function f8({a = () => eval("'use strict'; x")}, x) { return a() } 869 function f8({a = () => eval("'use strict'; x")}, x) { return a() }
843 assertEquals(4, f8({a: () => 4}, 5)); 870 assertEquals(4, f8({a: () => 4}, 5));
844 871
845 function f11({a = b}, {b}) { return a } 872 function f11({a = b}, {b}) { return a }
846 assertThrows(() => f11({}, {b: 4}), ReferenceError); 873 assertThrows(() => f11({}, {b: 4}), ReferenceError);
847 assertEquals(4, f11({a: 4}, {b: 5})); 874 assertEquals(4, f11({a: 4}, {b: 5}));
848 function f12({a = eval("b")}, {b}) { return a } 875 function f12({a = eval("b")}, {b}) { return a }
849 assertThrows(() => f12({}, {b: 4}), ReferenceError); 876 assertThrows(() => f12({}, {b: 4}), ReferenceError);
850 assertEquals(4, f12({a: 4}, {b: 5})); 877 assertEquals(4, f12({a: 4}, {b: 5}));
851 function f13({a = eval("b")}, {b}) { 'use strict'; return a } 878 (function() {
852 assertThrows(() => f13({}, {b: 4}), ReferenceError); 879 'use strict';
853 assertEquals(4, f13({a: 4}, {b: 5})); 880 function f13({a = eval("b")}, {b}) { return a }
881 assertThrows(() => f13({}, {b: 4}), ReferenceError);
882 assertEquals(4, f13({a: 4}, {b: 5}));
883 })();
854 function f14({a = eval("'use strict'; b")}, {b}) { return a } 884 function f14({a = eval("'use strict'; b")}, {b}) { return a }
855 assertThrows(() => f14({}, {b: 4}), ReferenceError); 885 assertThrows(() => f14({}, {b: 4}), ReferenceError);
856 assertEquals(4, f14({a: 4}, {b: 5})); 886 assertEquals(4, f14({a: 4}, {b: 5}));
857 887
858 function f15({a = () => b}, {b}) { return a() } 888 function f15({a = () => b}, {b}) { return a() }
859 assertEquals(4, f15({a: () => 4}, {b: 5})); 889 assertEquals(4, f15({a: () => 4}, {b: 5}));
860 function f16({a = () => eval("b")}, {b}) { return a() } 890 function f16({a = () => eval("b")}, {b}) { return a() }
861 assertEquals(4, f16({a: () => 4}, {b: 5})); 891 assertEquals(4, f16({a: () => 4}, {b: 5}));
862 function f17({a = () => eval("b")}, {b}) { 'use strict'; return a() } 892 (function() {
863 assertEquals(4, f17({a: () => 4}, {b: 5})); 893 'use strict';
894 function f17({a = () => eval("b")}, {b}) { return a() }
895 assertEquals(4, f17({a: () => 4}, {b: 5}));
896 })();
864 function f18({a = () => eval("'use strict'; b")}, {b}) { return a() } 897 function f18({a = () => eval("'use strict'; b")}, {b}) { return a() }
865 assertEquals(4, f18({a: () => 4}, {b: 5})); 898 assertEquals(4, f18({a: () => 4}, {b: 5}));
866 899
867 // TODO(caitp): TDZ for rest parameters is not working yet. 900 // TODO(caitp): TDZ for rest parameters is not working yet.
868 // function f30({x = a}, ...a) { return x[0] } 901 // function f30({x = a}, ...a) { return x[0] }
869 // assertThrows(() => f30({}), ReferenceError); 902 // assertThrows(() => f30({}), ReferenceError);
870 // assertEquals(4, f30({a: [4]}, 5)); 903 // assertEquals(4, f30({a: [4]}, 5));
871 // function f31({x = eval("a")}, ...a) { return x[0] } 904 // function f31({x = eval("a")}, ...a) { return x[0] }
872 // assertThrows(() => f31({}), ReferenceError); 905 // assertThrows(() => f31({}), ReferenceError);
873 // assertEquals(4, f31({a: [4]}, 5)); 906 // assertEquals(4, f31({a: [4]}, 5));
874 // function f32({x = eval("a")}, ...a) { 'use strict'; return x[0] } 907 // function f32({x = eval("a")}, ...a) { 'use strict'; return x[0] }
875 // assertThrows(() => f32({}), ReferenceError); 908 // assertThrows(() => f32({}), ReferenceError);
876 // assertEquals(4, f32({a: [4]}, 5)); 909 // assertEquals(4, f32({a: [4]}, 5));
877 // function f33({x = eval("'use strict'; a")}, ...a) { return x[0] } 910 // function f33({x = eval("'use strict'; a")}, ...a) { return x[0] }
878 // assertThrows(() => f33({}), ReferenceError); 911 // assertThrows(() => f33({}), ReferenceError);
879 // assertEquals(4, f33({a: [4]}, 5)); 912 // assertEquals(4, f33({a: [4]}, 5));
880 913
881 function f34({x = function() { return a }}, ...a) { return x()[0] } 914 function f34({x = function() { return a }}, ...a) { return x()[0] }
882 assertEquals(4, f34({}, 4)); 915 assertEquals(4, f34({}, 4));
883 function f35({x = () => a}, ...a) { return x()[0] } 916 function f35({x = () => a}, ...a) { return x()[0] }
884 assertEquals(4, f35({}, 4)); 917 assertEquals(4, f35({}, 4));
885 function f36({x = () => eval("a")}, ...a) { return x()[0] } 918 function f36({x = () => eval("a")}, ...a) { return x()[0] }
886 assertEquals(4, f36({}, 4)); 919 assertEquals(4, f36({}, 4));
887 function f37({x = () => eval("a")}, ...a) { 'use strict'; return x()[0] } 920 (function() {
888 assertEquals(4, f37({}, 4)); 921 'use strict';
922 function f37({x = () => eval("a")}, ...a) { return x()[0] }
923 assertEquals(4, f37({}, 4));
924 })();
889 function f38({x = () => { 'use strict'; return eval("a") }}, ...a) { return x( )[0] } 925 function f38({x = () => { 'use strict'; return eval("a") }}, ...a) { return x( )[0] }
890 assertEquals(4, f38({}, 4)); 926 assertEquals(4, f38({}, 4));
891 function f39({x = () => eval("'use strict'; a")}, ...a) { return x()[0] } 927 function f39({x = () => eval("'use strict'; a")}, ...a) { return x()[0] }
892 assertEquals(4, f39({}, 4)); 928 assertEquals(4, f39({}, 4));
893 929
894 // var g30 = ({x = a}, ...a) => {}; 930 // var g30 = ({x = a}, ...a) => {};
895 // assertThrows(() => g30({}), ReferenceError); 931 // assertThrows(() => g30({}), ReferenceError);
896 // var g31 = ({x = eval("a")}, ...a) => {}; 932 // var g31 = ({x = eval("a")}, ...a) => {};
897 // assertThrows(() => g31({}), ReferenceError); 933 // assertThrows(() => g31({}), ReferenceError);
898 // var g32 = ({x = eval("a")}, ...a) => { 'use strict'; }; 934 // var g32 = ({x = eval("a")}, ...a) => { 'use strict'; };
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
946 // TODO(rossberg, caitp): Add cases for default parameters. 982 // TODO(rossberg, caitp): Add cases for default parameters.
947 }()); 983 }());
948 984
949 985
950 (function TestForInOfTDZ() { 986 (function TestForInOfTDZ() {
951 assertThrows("'use strict'; let x = {}; for (let [x, y] of {x});", ReferenceEr ror); 987 assertThrows("'use strict'; let x = {}; for (let [x, y] of {x});", ReferenceEr ror);
952 assertThrows("'use strict'; let x = {}; for (let [y, x] of {x});", ReferenceEr ror); 988 assertThrows("'use strict'; let x = {}; for (let [y, x] of {x});", ReferenceEr ror);
953 assertThrows("'use strict'; let x = {}; for (let [x, y] in {x});", ReferenceEr ror); 989 assertThrows("'use strict'; let x = {}; for (let [x, y] in {x});", ReferenceEr ror);
954 assertThrows("'use strict'; let x = {}; for (let [y, x] in {x});", ReferenceEr ror); 990 assertThrows("'use strict'; let x = {}; for (let [y, x] in {x});", ReferenceEr ror);
955 }()); 991 }());
OLDNEW
« no previous file with comments | « test/mjsunit/harmony/arrow-rest-params.js ('k') | test/mjsunit/harmony/rest-params.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698