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 --harmony-arrow-functions |
6 // Flags: --harmony-arrow-functions --harmony-rest-parameters | 6 // Flags: --harmony-default-parameters --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); |
11 assertEquals(2, y); | 11 assertEquals(2, y); |
12 | 12 |
13 var {z} = { z : 3 }; | 13 var {z} = { z : 3 }; |
14 assertEquals(3, z); | 14 assertEquals(3, z); |
15 | 15 |
16 | 16 |
(...skipping 699 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
716 | 716 |
717 var g2 = ({c, d}, {a, b}) => { return c - d + a - b; }; | 717 var g2 = ({c, d}, {a, b}) => { return c - d + a - b; }; |
718 assertEquals(7, g2({c : 7, d : 1}, {a : 6, b : 5})); | 718 assertEquals(7, g2({c : 7, d : 1}, {a : 6, b : 5})); |
719 | 719 |
720 var g3 = ([{a, b}]) => { return a - b; }; | 720 var g3 = ([{a, b}]) => { return a - b; }; |
721 assertEquals(1, g3([{a : 6, b : 5}])); | 721 assertEquals(1, g3([{a : 6, b : 5}])); |
722 }()); | 722 }()); |
723 | 723 |
724 | 724 |
725 (function TestExpressionsInParameters() { | 725 (function TestExpressionsInParameters() { |
| 726 function f0(x = eval(0)) { return x } |
| 727 assertEquals(0, f0()); |
726 function f1({a = eval(1)}) { return a } | 728 function f1({a = eval(1)}) { return a } |
727 assertEquals(1, f1({})); | 729 assertEquals(1, f1({})); |
728 function f2([x = eval(2)]) { return x } | 730 function f2([x = eval(2)]) { return x } |
729 assertEquals(2, f2([])); | 731 assertEquals(2, f2([])); |
730 function f3({[eval(7)]: x}) { return x } | 732 function f3({[eval(7)]: x}) { return x } |
731 assertEquals(3, f3({7: 3})); | 733 assertEquals(3, f3({7: 3})); |
732 // TODO(rossberg, caitp): Add tests for default parameters. | |
733 })(); | 734 })(); |
734 | 735 |
735 | 736 |
736 (function TestParameterScoping() { | 737 (function TestParameterScoping() { |
737 var x = 1; | 738 var x = 1; |
738 | 739 |
739 function f1({a = x}) { var x = 2; return a; } | 740 function f1({a = x}) { var x = 2; return a; } |
740 assertEquals(1, f1({})); | 741 assertEquals(1, f1({})); |
741 function f2({a = x}) { function x() {}; return a; } | 742 function f2({a = x}) { function x() {}; return a; } |
742 assertEquals(1, f2({})); | 743 assertEquals(1, f2({})); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
812 assertEquals(1, f20({a: 1, b: 2})); | 813 assertEquals(1, f20({a: 1, b: 2})); |
813 function f21({[eval('y')]: x}) { var y = 'b'; return x; } | 814 function f21({[eval('y')]: x}) { var y = 'b'; return x; } |
814 assertEquals(1, f21({a: 1, b: 2})); | 815 assertEquals(1, f21({a: 1, b: 2})); |
815 var g20 = ({[y]: x}) => { var y = 'b'; return x; }; | 816 var g20 = ({[y]: x}) => { var y = 'b'; return x; }; |
816 assertEquals(1, g20({a: 1, b: 2})); | 817 assertEquals(1, g20({a: 1, b: 2})); |
817 var g21 = ({[eval('y')]: x}) => { var y = 'b'; return x; }; | 818 var g21 = ({[eval('y')]: x}) => { var y = 'b'; return x; }; |
818 assertEquals(1, g21({a: 1, b: 2})); | 819 assertEquals(1, g21({a: 1, b: 2})); |
819 })(); | 820 })(); |
820 | 821 |
821 | 822 |
822 (function TestParameterTDZ() { | 823 (function TestParameterDestructuringTDZ() { |
823 function f1({a = x}, x) { return a } | 824 function f1({a = x}, x) { return a } |
824 assertThrows(() => f1({}, 4), ReferenceError); | 825 assertThrows(() => f1({}, 4), ReferenceError); |
825 assertEquals(4, f1({a: 4}, 5)); | 826 assertEquals(4, f1({a: 4}, 5)); |
826 function f2({a = eval("x")}, x) { return a } | 827 function f2({a = eval("x")}, x) { return a } |
827 assertThrows(() => f2({}, 4), ReferenceError); | 828 assertThrows(() => f2({}, 4), ReferenceError); |
828 assertEquals(4, f2({a: 4}, 5)); | 829 assertEquals(4, f2({a: 4}, 5)); |
829 function f3({a = eval("x")}, x) { 'use strict'; return a } | 830 function f3({a = eval("x")}, x) { 'use strict'; return a } |
830 assertThrows(() => f3({}, 4), ReferenceError); | 831 assertThrows(() => f3({}, 4), ReferenceError); |
831 assertEquals(4, f3({a: 4}, 5)); | 832 assertEquals(4, f3({a: 4}, 5)); |
832 function f4({a = eval("'use strict'; x")}, x) { return a } | 833 function f4({a = eval("'use strict'; x")}, x) { return a } |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
936 function f4(x, {}) { x = 2; return arguments[0] } | 937 function f4(x, {}) { x = 2; return arguments[0] } |
937 assertEquals(7, f4(7, {})); | 938 assertEquals(7, f4(7, {})); |
938 function f5(x, ...a) { arguments[0] = 0; return x } | 939 function f5(x, ...a) { arguments[0] = 0; return x } |
939 assertEquals(6, f5(6, {})); | 940 assertEquals(6, f5(6, {})); |
940 function f6(x, ...a) { x = 2; return arguments[0] } | 941 function f6(x, ...a) { x = 2; return arguments[0] } |
941 assertEquals(6, f6(6, {})); | 942 assertEquals(6, f6(6, {})); |
942 function f7({a: x}) { x = 2; return arguments[0].a } | 943 function f7({a: x}) { x = 2; return arguments[0].a } |
943 assertEquals(5, f7({a: 5})); | 944 assertEquals(5, f7({a: 5})); |
944 function f8(x, ...a) { a = []; return arguments[1] } | 945 function f8(x, ...a) { a = []; return arguments[1] } |
945 assertEquals(6, f8(5, 6)); | 946 assertEquals(6, f8(5, 6)); |
946 // TODO(rossberg, caitp): Add cases for default parameters. | |
947 }()); | 947 }()); |
948 | 948 |
949 | 949 |
950 (function TestForInOfTDZ() { | 950 (function TestForInOfTDZ() { |
951 assertThrows("'use strict'; let x = {}; for (let [x, y] of {x});", ReferenceEr
ror); | 951 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); | 952 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); | 953 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); | 954 assertThrows("'use strict'; let x = {}; for (let [y, x] in {x});", ReferenceEr
ror); |
955 }()); | 955 }()); |
OLD | NEW |