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

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

Issue 1225413005: [es6] Check declaration conflicts between non-simple parameters and the function body (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase Created 5 years, 5 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 | « src/scopes.cc ('k') | no next file » | 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 --harmony-computed-property-names 5 // Flags: --harmony-destructuring --harmony-computed-property-names
6 // Flags: --harmony-arrow-functions 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);
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 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 let {x = y, y} = { y : 42 }; 220 let {x = y, y} = { y : 42 };
221 }, ReferenceError); 221 }, ReferenceError);
222 222
223 { 223 {
224 let {x, y = eval("x+1")} = {x:42}; 224 let {x, y = eval("x+1")} = {x:42};
225 assertEquals(42, x); 225 assertEquals(42, x);
226 assertEquals(43, y); 226 assertEquals(43, y);
227 } 227 }
228 228
229 { 229 {
230 let {x, y = () => eval("x+1")} = {x:42};
231 assertEquals(42, x);
232 assertEquals(43, y());
233 }
234
235 {
230 let {x = function() {return y+1;}, y} = {y:42}; 236 let {x = function() {return y+1;}, y} = {y:42};
231 assertEquals(43, x()); 237 assertEquals(43, x());
232 assertEquals(42, y); 238 assertEquals(42, y);
233 } 239 }
234 { 240 {
235 let {x = function() {return eval("y+1");}, y} = {y:42}; 241 let {x = function() {return eval("y+1");}, y} = {y:42};
236 assertEquals(43, x()); 242 assertEquals(43, x());
237 assertEquals(42, y); 243 assertEquals(42, y);
238 } 244 }
239 }()); 245 }());
(...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after
722 function f1({a = x}) { var x = 2; return a; } 728 function f1({a = x}) { var x = 2; return a; }
723 assertEquals(1, f1({})); 729 assertEquals(1, f1({}));
724 function f2({a = x}) { function x() {}; return a; } 730 function f2({a = x}) { function x() {}; return a; }
725 assertEquals(1, f2({})); 731 assertEquals(1, f2({}));
726 function f3({a = x}) { 'use strict'; let x = 2; return a; } 732 function f3({a = x}) { 'use strict'; let x = 2; return a; }
727 assertEquals(1, f3({})); 733 assertEquals(1, f3({}));
728 function f4({a = x}) { 'use strict'; const x = 2; return a; } 734 function f4({a = x}) { 'use strict'; const x = 2; return a; }
729 assertEquals(1, f4({})); 735 assertEquals(1, f4({}));
730 function f5({a = x}) { 'use strict'; function x() {}; return a; } 736 function f5({a = x}) { 'use strict'; function x() {}; return a; }
731 assertEquals(1, f5({})); 737 assertEquals(1, f5({}));
738 // TODO(rossberg): Apparently, eval in default expressions is not working yet.
739 // function f6({a = eval("x")}) { var x; return a; }
740 // assertEquals(1, f6({}));
741 // function f61({a = eval("x")}) { 'use strict'; var x; return a; }
742 // assertEquals(1, f61({}));
743 // function f62({a = eval("'use strict'; x")}) { var x; return a; }
744 // assertEquals(1, f62({}));
745 function f7({a = function() { return x }}) { var x; return a(); }
746 assertEquals(1, f7({}));
747 function f8({a = () => x}) { var x; return a(); }
748 assertEquals(1, f8({}));
749 // function f9({a = () => eval("x")}) { var x; return a(); }
750 // assertEquals(1, f9({}));
751 // function f91({a = () => eval("x")}) { 'use strict'; var x; return a(); }
752 // assertEquals(1, f91({}));
753 // function f92({a = () => { 'use strict'; return eval("x") }}) { var x; retur n a(); }
754 // assertEquals(1, f92({}));
755 // function f93({a = () => eval("'use strict'; x")}) { var x; return a(); }
756 // assertEquals(1, f93({}));
732 757
733 var g1 = ({a = x}) => { var x = 2; return a; }; 758 var g1 = ({a = x}) => { var x = 2; return a; };
734 assertEquals(1, g1({})); 759 assertEquals(1, g1({}));
735 var g2 = ({a = x}) => { function x() {}; return a; }; 760 var g2 = ({a = x}) => { function x() {}; return a; };
736 assertEquals(1, g2({})); 761 assertEquals(1, g2({}));
737 var g3 = ({a = x}) => { 'use strict'; let x = 2; return a; }; 762 var g3 = ({a = x}) => { 'use strict'; let x = 2; return a; };
738 assertEquals(1, g3({})); 763 assertEquals(1, g3({}));
739 var g4 = ({a = x}) => { 'use strict'; const x = 2; return a; }; 764 var g4 = ({a = x}) => { 'use strict'; const x = 2; return a; };
740 assertEquals(1, g4({})); 765 assertEquals(1, g4({}));
741 var g5 = ({a = x}) => { 'use strict'; function x() {}; return a; }; 766 var g5 = ({a = x}) => { 'use strict'; function x() {}; return a; };
742 assertEquals(1, g5({})); 767 assertEquals(1, g5({}));
768 // var g6 = ({a = eval("x")}) => { var x; return a; };
769 // assertEquals(1, g6({}));
770 // var g61 = ({a = eval("x")}) => { 'use strict'; var x; return a; };
771 // assertEquals(1, g61({}));
772 // var g62 = ({a = eval("'use strict'; x")}) => { var x; return a; };
773 // assertEquals(1, g62({}));
774 var g7 = ({a = function() { return x }}) => { var x; return a(); };
775 assertEquals(1, g7({}));
776 var g8 = ({a = () => x}) => { var x; return a(); };
777 assertEquals(1, g8({}));
778 // var g9 = ({a = () => eval("x")}) => { var x; return a(); };
779 // assertEquals(1, g9({}));
780 // var g91 = ({a = () => eval("x")}) => { 'use strict'; var x; return a(); };
781 // assertEquals(1, g91({}));
782 // var g92 = ({a = () => { 'use strict'; return eval("x") }}) => { var x; retu rn a(); };
783 // assertEquals(1, g92({}));
784 // var g93 = ({a = () => eval("'use strict'; x")}) => { var x; return a(); };
785 // assertEquals(1, g93({}));
743 786
744 var f6 = function f({x = f}) { var f; return x; } 787 var f11 = function f({x = f}) { var f; return x; }
745 assertSame(f6, f6({})); 788 assertSame(f11, f11({}));
746 var f7 = function f({x = f}) { function f() {}; return x; } 789 var f12 = function f({x = f}) { function f() {}; return x; }
747 assertSame(f7, f7({})); 790 assertSame(f12, f12({}));
748 var f8 = function f({x = f}) { 'use strict'; let f; return x; } 791 var f13 = function f({x = f}) { 'use strict'; let f; return x; }
749 assertSame(f8, f8({})); 792 assertSame(f13, f13({}));
750 var f9 = function f({x = f}) { 'use strict'; const f = 0; return x; } 793 var f14 = function f({x = f}) { 'use strict'; const f = 0; return x; }
751 assertSame(f9, f9({})); 794 assertSame(f14, f14({}));
752 var f10 = function f({x = f}) { 'use strict'; function f() {}; return x; } 795 var f15 = function f({x = f}) { 'use strict'; function f() {}; return x; }
753 assertSame(f10, f10({})); 796 assertSame(f15, f15({}));
754 var f11 = function f({f = 7, x = f}) { return x; } 797 var f16 = function f({f = 7, x = f}) { return x; }
755 assertSame(7, f11({})); 798 assertSame(7, f16({}));
756 799
757 var y = 'a'; 800 var y = 'a';
758 function f20({[y]: x}) { var y = 'b'; return x; } 801 function f20({[y]: x}) { var y = 'b'; return x; }
759 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; }
804 // assertEquals(1, f21({a: 1, b: 2}));
760 var g20 = ({[y]: x}) => { var y = 'b'; return x; }; 805 var g20 = ({[y]: x}) => { var y = 'b'; return x; };
761 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; };
808 // assertEquals(1, g21({a: 1, b: 2}));
809
810 // TODO(caitp): TDZ for rest parameters is not working yet.
811 // function f30({x = a}, ...a) {}
812 // assertThrows(() => f30({}), ReferenceError);
813 // function f31({x = eval("a")}, ...a) {}
814 // assertThrows(() => f31({}), ReferenceError);
815 // function f32({x = eval("a")}, ...a) { 'use strict'; }
816 // assertThrows(() => f32({}), ReferenceError);
817 // function f33({x = eval("'use strict'; a")}, ...a) {}
818 // assertThrows(() => f33({}), ReferenceError);
819 function f34({x = function() { return a }}, ...a) { return x()[0] }
820 assertEquals(4, f34({}, 4));
821 function f35({x = () => a}, ...a) { return x()[0] }
822 assertEquals(4, f35({}, 4));
823 // function f36({x = () => eval("a")}, ...a) { return x()[0] }
824 // assertEquals(4, f36({}, 4));
825 // function f37({x = () => eval("a")}, ...a) { 'use strict'; return x()[0] }
826 // assertEquals(4, f37({}, 4));
827 // function f38({x = () => { 'use strict'; return eval("a") }}, ...a) { return x()[0] }
828 // assertEquals(4, f38({}, 4));
829 // function f39({x = () => eval("'use strict'; a")}, ...a) { return x()[0] }
830 // assertEquals(4, f39({}, 4));
831
832 // var g30 = ({x = a}, ...a) => {};
833 // assertThrows(() => g30({}), ReferenceError);
834 // var g31 = ({x = eval("a")}, ...a) => {};
835 // assertThrows(() => g31({}), ReferenceError);
836 // var g32 = ({x = eval("a")}, ...a) => { 'use strict'; };
837 // assertThrows(() => g32({}), ReferenceError);
838 // var g33 = ({x = eval("'use strict'; a")}, ...a) => {};
839 // assertThrows(() => g33({}), ReferenceError);
840 var g34 = ({x = function() { return a }}, ...a) => { return x()[0] };
841 assertEquals(4, g34({}, 4));
842 var g35 = ({x = () => a}, ...a) => { return x()[0] };
843 assertEquals(4, g35({}, 4));
762 })(); 844 })();
763 845
764 846
765 (function TestDuplicatesInParameters() { 847 (function TestDuplicatesInParameters() {
766 assertThrows("'use strict';function f(x,x){}", SyntaxError); 848 assertThrows("'use strict';function f(x,x){}", SyntaxError);
767 assertThrows("'use strict';function f({x,x}){}", SyntaxError); 849 assertThrows("'use strict';function f({x,x}){}", SyntaxError);
768 assertThrows("'use strict';function f(x, {x}){}", SyntaxError); 850 assertThrows("'use strict';function f(x, {x}){}", SyntaxError);
769 assertThrows("'use strict';var f = (x,x) => {};", SyntaxError); 851 assertThrows("'use strict';var f = (x,x) => {};", SyntaxError);
770 assertThrows("'use strict';var f = ({x,x}) => {};", SyntaxError); 852 assertThrows("'use strict';var f = ({x,x}) => {};", SyntaxError);
771 assertThrows("'use strict';var f = (x, {x}) => {};", SyntaxError); 853 assertThrows("'use strict';var f = (x, {x}) => {};", SyntaxError);
772 854
773 function ok(x) { var x; }; ok(); 855 function ok1(x) { var x; return x; };
774 // TODO(rossberg): Check for variable collision. 856 assertEquals(1, ok1(1));
775 // assertThrows("function f({x}) { var x; }; f({});", SyntaxError); 857 function ok2(x) { 'use strict'; { let x = 2; return x; } };
776 // assertThrows("'use strict'; function f({x}) { let x = 0; }; f({});", Syntax Error); 858 assertEquals(2, ok2(1));
859
860 assertThrows("function f({x}) { var x; }; f({});", SyntaxError);
861 assertThrows("function f({x}) { { var x; } }; f({});", SyntaxError);
862 assertThrows("'use strict'; function f(x) { let x = 0; }; f({});", SyntaxError );
863 assertThrows("'use strict'; function f({x}) { let x = 0; }; f({});", SyntaxErr or);
777 }()); 864 }());
778 865
779 866
780 (function TestForInOfTDZ() { 867 (function TestForInOfTDZ() {
781 assertThrows("'use strict'; let x = {}; for (let [x, y] of {x});", ReferenceEr ror); 868 assertThrows("'use strict'; let x = {}; for (let [x, y] of {x});", ReferenceEr ror);
782 assertThrows("'use strict'; let x = {}; for (let [y, x] of {x});", ReferenceEr ror); 869 assertThrows("'use strict'; let x = {}; for (let [y, x] of {x});", ReferenceEr ror);
783 assertThrows("'use strict'; let x = {}; for (let [x, y] in {x});", ReferenceEr ror); 870 assertThrows("'use strict'; let x = {}; for (let [x, y] in {x});", ReferenceEr ror);
784 assertThrows("'use strict'; let x = {}; for (let [y, x] in {x});", ReferenceEr ror); 871 assertThrows("'use strict'; let x = {}; for (let [y, x] in {x});", ReferenceEr ror);
785 }()); 872 }());
OLDNEW
« no previous file with comments | « src/scopes.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698