| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 }()); |
| OLD | NEW |