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 --harmony-computed-property-names | 5 // Flags: --harmony-destructuring --harmony-computed-property-names |
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 788 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
799 | 799 |
800 var y = 'a'; | 800 var y = 'a'; |
801 function f20({[y]: x}) { var y = 'b'; return x; } | 801 function f20({[y]: x}) { var y = 'b'; return x; } |
802 assertEquals(1, f20({a: 1, b: 2})); | 802 assertEquals(1, f20({a: 1, b: 2})); |
803 // function f21({[eval('y')]: x}) { var y = 'b'; return x; } | 803 // function f21({[eval('y')]: x}) { var y = 'b'; return x; } |
804 // assertEquals(1, f21({a: 1, b: 2})); | 804 // assertEquals(1, f21({a: 1, b: 2})); |
805 var g20 = ({[y]: x}) => { var y = 'b'; return x; }; | 805 var g20 = ({[y]: x}) => { var y = 'b'; return x; }; |
806 assertEquals(1, g20({a: 1, b: 2})); | 806 assertEquals(1, g20({a: 1, b: 2})); |
807 // var g21 = ({[eval('y')]: x}) => { var y = 'b'; return x; }; | 807 // var g21 = ({[eval('y')]: x}) => { var y = 'b'; return x; }; |
808 // assertEquals(1, g21({a: 1, b: 2})); | 808 // assertEquals(1, g21({a: 1, b: 2})); |
| 809 })(); |
| 810 |
| 811 |
| 812 (function TestParameterTDZ() { |
| 813 function f1({a = x}, x) { return a } |
| 814 assertThrows(() => f1({}, 4), ReferenceError); |
| 815 assertEquals(4, f1({a: 4}, 5)); |
| 816 // TODO(rossberg): eval in default expressions is not working yet. |
| 817 // function f2({a = eval("x")}, x) { return a } |
| 818 // assertThrows(() => f2({}, 4), ReferenceError); |
| 819 // assertEquals(4, f2({a: 4}, 5)); |
| 820 // function f3({a = eval("x")}, x) { 'use strict'; return a } |
| 821 // assertThrows(() => f3({}, 4), ReferenceError); |
| 822 // assertEquals(4, f3({a: 4}, 5)); |
| 823 // function f4({a = eval("'use strict'; x")}, x) { return a } |
| 824 // assertThrows(() => f4({}, 4), ReferenceError); |
| 825 // assertEquals(4, f4({a: 4}, 5)); |
| 826 |
| 827 function f5({a = () => x}, x) { return a() } |
| 828 assertEquals(4, f5({a: () => 4}, 5)); |
| 829 // TODO(rossberg): eval in default expressions is not working yet. |
| 830 // function f6({a = () => eval("x")}, x) { return a() } |
| 831 // assertEquals(4, f6({a: () => 4}, 5)); |
| 832 // function f7({a = () => eval("x")}, x) { 'use strict'; return a() } |
| 833 // assertEquals(4, f7({a: () => 4}, 5)); |
| 834 // function f8({a = () => eval("'use strict'; x")}, x) { return a() } |
| 835 // assertEquals(4, f8({a: () => 4}, 5)); |
| 836 |
| 837 function f11({a = b}, {b}) { return a } |
| 838 assertThrows(() => f11({}, {b: 4}), ReferenceError); |
| 839 assertEquals(4, f11({a: 4}, {b: 5})); |
| 840 // function f12({a = eval("b")}, {b}) { return a } |
| 841 // assertThrows(() => f12({}, {b: 4}), ReferenceError); |
| 842 // assertEquals(4, f12({a: 4}, {b: 5})); |
| 843 // function f13({a = eval("b")}, {b}) { 'use strict'; return a } |
| 844 // assertThrows(() => f13({}, {b: 4}), ReferenceError); |
| 845 // assertEquals(4, f13({a: 4}, {b: 5})); |
| 846 // function f14({a = eval("'use strict'; b")}, {b}) { return a } |
| 847 // assertThrows(() => f14({}, {b: 4}), ReferenceError); |
| 848 // assertEquals(4, f14({a: 4}, {b: 5})); |
| 849 |
| 850 function f15({a = () => b}, {b}) { return a() } |
| 851 assertEquals(4, f15({a: () => 4}, {b: 5})); |
| 852 // function f16({a = () => eval("b")}, {b}) { return a() } |
| 853 // assertEquals(4, f16({a: () => 4}, {b: 5})); |
| 854 // function f17({a = () => eval("b")}, {b}) { 'use strict'; return a() } |
| 855 // assertEquals(4, f17({a: () => 4}, {b: 5})); |
| 856 // function f18({a = () => eval("'use strict'; b")}, {b}) { return a() } |
| 857 // assertEquals(4, f18({a: () => 4}, {b: 5})); |
809 | 858 |
810 // TODO(caitp): TDZ for rest parameters is not working yet. | 859 // TODO(caitp): TDZ for rest parameters is not working yet. |
811 // function f30({x = a}, ...a) {} | 860 // function f30({x = a}, ...a) { return x[0] } |
812 // assertThrows(() => f30({}), ReferenceError); | 861 // assertThrows(() => f30({}), ReferenceError); |
813 // function f31({x = eval("a")}, ...a) {} | 862 // assertEquals(4, f30({a: [4]}, 5)); |
| 863 // function f31({x = eval("a")}, ...a) { return x[0] } |
814 // assertThrows(() => f31({}), ReferenceError); | 864 // assertThrows(() => f31({}), ReferenceError); |
815 // function f32({x = eval("a")}, ...a) { 'use strict'; } | 865 // assertEquals(4, f31({a: [4]}, 5)); |
| 866 // function f32({x = eval("a")}, ...a) { 'use strict'; return x[0] } |
816 // assertThrows(() => f32({}), ReferenceError); | 867 // assertThrows(() => f32({}), ReferenceError); |
817 // function f33({x = eval("'use strict'; a")}, ...a) {} | 868 // assertEquals(4, f32({a: [4]}, 5)); |
| 869 // function f33({x = eval("'use strict'; a")}, ...a) { return x[0] } |
818 // assertThrows(() => f33({}), ReferenceError); | 870 // assertThrows(() => f33({}), ReferenceError); |
| 871 // assertEquals(4, f33({a: [4]}, 5)); |
| 872 |
819 function f34({x = function() { return a }}, ...a) { return x()[0] } | 873 function f34({x = function() { return a }}, ...a) { return x()[0] } |
820 assertEquals(4, f34({}, 4)); | 874 assertEquals(4, f34({}, 4)); |
821 function f35({x = () => a}, ...a) { return x()[0] } | 875 function f35({x = () => a}, ...a) { return x()[0] } |
822 assertEquals(4, f35({}, 4)); | 876 assertEquals(4, f35({}, 4)); |
823 // function f36({x = () => eval("a")}, ...a) { return x()[0] } | 877 // function f36({x = () => eval("a")}, ...a) { return x()[0] } |
824 // assertEquals(4, f36({}, 4)); | 878 // assertEquals(4, f36({}, 4)); |
825 // function f37({x = () => eval("a")}, ...a) { 'use strict'; return x()[0] } | 879 // function f37({x = () => eval("a")}, ...a) { 'use strict'; return x()[0] } |
826 // assertEquals(4, f37({}, 4)); | 880 // assertEquals(4, f37({}, 4)); |
827 // function f38({x = () => { 'use strict'; return eval("a") }}, ...a) { return
x()[0] } | 881 // function f38({x = () => { 'use strict'; return eval("a") }}, ...a) { return
x()[0] } |
828 // assertEquals(4, f38({}, 4)); | 882 // assertEquals(4, f38({}, 4)); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
863 assertThrows("'use strict'; function f({x}) { let x = 0; }; f({});", SyntaxErr
or); | 917 assertThrows("'use strict'; function f({x}) { let x = 0; }; f({});", SyntaxErr
or); |
864 }()); | 918 }()); |
865 | 919 |
866 | 920 |
867 (function TestForInOfTDZ() { | 921 (function TestForInOfTDZ() { |
868 assertThrows("'use strict'; let x = {}; for (let [x, y] of {x});", ReferenceEr
ror); | 922 assertThrows("'use strict'; let x = {}; for (let [x, y] of {x});", ReferenceEr
ror); |
869 assertThrows("'use strict'; let x = {}; for (let [y, x] of {x});", ReferenceEr
ror); | 923 assertThrows("'use strict'; let x = {}; for (let [y, x] of {x});", ReferenceEr
ror); |
870 assertThrows("'use strict'; let x = {}; for (let [x, y] in {x});", ReferenceEr
ror); | 924 assertThrows("'use strict'; let x = {}; for (let [x, y] in {x});", ReferenceEr
ror); |
871 assertThrows("'use strict'; let x = {}; for (let [y, x] in {x});", ReferenceEr
ror); | 925 assertThrows("'use strict'; let x = {}; for (let [y, x] in {x});", ReferenceEr
ror); |
872 }()); | 926 }()); |
OLD | NEW |