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

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

Issue 1371333004: [es6] Scoping & initialization for var shadowing non-simple parameters (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Handle function decls correctly Created 5 years, 2 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
« src/scopes.cc ('K') | « 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-arrow-functions 5 // Flags: --harmony-destructuring --harmony-arrow-functions
6 // Flags: --harmony-default-parameters --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, get, set } = { x : 1, y : 2, get: 3, set: 4 }; 9 var { x : x, y : y, get, set } = { x : 1, y : 2, get: 3, set: 4 };
10 assertEquals(1, x); 10 assertEquals(1, x);
(...skipping 939 matching lines...) Expand 10 before | Expand all | Expand 10 after
950 assertThrows("'use strict';function f({x,x}){}", SyntaxError); 950 assertThrows("'use strict';function f({x,x}){}", SyntaxError);
951 assertThrows("'use strict';function f(x, {x}){}", SyntaxError); 951 assertThrows("'use strict';function f(x, {x}){}", SyntaxError);
952 assertThrows("'use strict';var f = (x,x) => {};", SyntaxError); 952 assertThrows("'use strict';var f = (x,x) => {};", SyntaxError);
953 assertThrows("'use strict';var f = ({x,x}) => {};", SyntaxError); 953 assertThrows("'use strict';var f = ({x,x}) => {};", SyntaxError);
954 assertThrows("'use strict';var f = (x, {x}) => {};", SyntaxError); 954 assertThrows("'use strict';var f = (x, {x}) => {};", SyntaxError);
955 955
956 function ok1(x) { var x; return x; }; 956 function ok1(x) { var x; return x; };
957 assertEquals(1, ok1(1)); 957 assertEquals(1, ok1(1));
958 function ok2(x) { 'use strict'; { let x = 2; return x; } }; 958 function ok2(x) { 'use strict'; { let x = 2; return x; } };
959 assertEquals(2, ok2(1)); 959 assertEquals(2, ok2(1));
960
961 assertThrows("function f({x}) { var x; }; f({});", SyntaxError);
962 assertThrows("function f({x}) { { var x; } }; f({});", SyntaxError);
963 assertThrows("'use strict'; function f(x) { let x = 0; }; f({});", SyntaxError );
964 assertThrows("'use strict'; function f({x}) { let x = 0; }; f({});", SyntaxErr or);
965 }()); 960 }());
966 961
967 962
963 (function TestShadowingOfParameters() {
adamk 2015/09/29 18:28:29 Can you add tests with multiple parameters that ge
rossberg 2015/09/30 14:50:48 Done.
964 function f1({x}) { var x = 2; return x }
965 assertEquals(2, f1({x: 1}));
966 function f2({x}) { { var x = 2; } return x; }
967 assertEquals(2, f2({x: 1}));
968 function f3({x}) { var y = x; var x = 2; return y; }
969 assertEquals(1, f3({x: 1}));
970 function f4({x}, g = () => x) { { var y = x; var x = 2; } return y; }
971 assertEquals(1, f4({x: 1}));
972 function f5({x}, g = () => x) { var x = 2; return g(); }
973 assertEquals(1, f5({x: 1}));
974 function f6({x}, g = () => x) { { var x = 2; } return g(); }
975 assertEquals(1, f6({x: 1}));
976 function f7({x}) { var g = () => x; var x = 2; return g(); }
977 assertEquals(2, f7({x: 1}));
978 function f8({x}) { { var g = () => x; var x = 2; } return g(); }
979 assertEquals(2, f8({x: 1}));
980 function f9({x}, g = () => eval("x")) { var x = 2; return g(); }
981 assertEquals(1, f9({x: 1}));
982
983 function f10({x}) { function x() { return 2 }; return x(); }
984 assertEquals(2, f10({x: 1}));
985 function f11({x}) { { function x() { return 2 } } return x(); }
986 assertEquals(2, f11({x: 1}));
987
988 var g1 = ({x}) => { var x = 2; return x };
989 assertEquals(2, g1({x: 1}));
990 var g2 = ({x}) => { { var x = 2; } return x; };
991 assertEquals(2, g2({x: 1}));
992 var g3 = ({x}) => { var y = x; var x = 2; return y; };
993 assertEquals(1, g3({x: 1}));
994 var g4 = ({x}, g = () => x) => { { var y = x; var x = 2; } return y; };
995 assertEquals(1, g4({x: 1}));
996 var g5 = ({x}, g = () => x) => { var x = 2; return g(); };
997 assertEquals(1, g5({x: 1}));
998 var g6 = ({x}, g = () => x) => { { var x = 2; } return g(); };
999 assertEquals(1, g6({x: 1}));
1000 var g7 = ({x}) => { var g = () => x; var x = 2; return g(); };
1001 assertEquals(2, g7({x: 1}));
1002 var g8 = ({x}) => { { var g = () => x; var x = 2; } return g(); };
1003 assertEquals(2, g8({x: 1}));
1004 var g9 = ({x}, g = () => eval("x")) => { var x = 2; return g(); };
1005 assertEquals(1, g9({x: 1}));
1006
1007 var g10 = ({x}) => { function x() { return 2 }; return x(); }
1008 assertEquals(2, g10({x: 1}));
1009 var g11 = ({x}) => { { function x() { return 2 } } return x(); }
1010 assertEquals(2, g11({x: 1}));
1011
1012 assertThrows("'use strict'; function f(x) { let x = 0; }; f({});", SyntaxError );
1013 assertThrows("'use strict'; function f({x}) { let x = 0; }; f({});", SyntaxErr or);
1014 assertThrows("'use strict'; function f(x) { const x = 0; }; f({});", SyntaxErr or);
1015 assertThrows("'use strict'; function f({x}) { const x = 0; }; f({});", SyntaxE rror);
1016
1017 assertThrows("'use strict'; let g = (x) => { let x = 0; }; f({});", SyntaxErro r);
1018 assertThrows("'use strict'; let g = ({x}) => { let x = 0; }; f({});", SyntaxEr ror);
1019 assertThrows("'use strict'; let g = (x) => { const x = 0; }; f({});", SyntaxEr ror);
1020 assertThrows("'use strict'; let g = ({x}) => { const x = 0; }; f({});", Syntax Error);
1021 }());
1022
1023
968 (function TestArgumentsForNonSimpleParameters() { 1024 (function TestArgumentsForNonSimpleParameters() {
969 function f1({}, x) { arguments[1] = 0; return x } 1025 function f1({}, x) { arguments[1] = 0; return x }
970 assertEquals(6, f1({}, 6)); 1026 assertEquals(6, f1({}, 6));
971 function f2({}, x) { x = 2; return arguments[1] } 1027 function f2({}, x) { x = 2; return arguments[1] }
972 assertEquals(7, f2({}, 7)); 1028 assertEquals(7, f2({}, 7));
973 function f3(x, {}) { arguments[0] = 0; return x } 1029 function f3(x, {}) { arguments[0] = 0; return x }
974 assertEquals(6, f3(6, {})); 1030 assertEquals(6, f3(6, {}));
975 function f4(x, {}) { x = 2; return arguments[0] } 1031 function f4(x, {}) { x = 2; return arguments[0] }
976 assertEquals(7, f4(7, {})); 1032 assertEquals(7, f4(7, {}));
977 function f5(x, ...a) { arguments[0] = 0; return x } 1033 function f5(x, ...a) { arguments[0] = 0; return x }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1016 assertThrows(function(){ eval("({}) => {'use strict';}") }, SyntaxError); 1072 assertThrows(function(){ eval("({}) => {'use strict';}") }, SyntaxError);
1017 assertThrows( 1073 assertThrows(
1018 function(){ eval("(class{foo({}) {'use strict';}});") }, SyntaxError); 1074 function(){ eval("(class{foo({}) {'use strict';}});") }, SyntaxError);
1019 1075
1020 assertThrows( 1076 assertThrows(
1021 function(){ eval("function(a, {}){'use strict';}") }, SyntaxError); 1077 function(){ eval("function(a, {}){'use strict';}") }, SyntaxError);
1022 assertThrows(function(){ eval("(a, {}) => {'use strict';}") }, SyntaxError); 1078 assertThrows(function(){ eval("(a, {}) => {'use strict';}") }, SyntaxError);
1023 assertThrows( 1079 assertThrows(
1024 function(){ eval("(class{foo(a, {}) {'use strict';}});") }, SyntaxError); 1080 function(){ eval("(class{foo(a, {}) {'use strict';}});") }, SyntaxError);
1025 })(); 1081 })();
OLDNEW
« src/scopes.cc ('K') | « src/scopes.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698