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

Side by Side Diff: test/mjsunit/harmony/default-parameters.js

Issue 1292753007: [es6] Parameter scopes for sloppy eval (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Comments Created 5 years, 4 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-default-parameters --harmony-arrow-functions 5 // Flags: --harmony-default-parameters --harmony-arrow-functions
6 // Flags: --harmony-rest-parameters 6 // Flags: --harmony-rest-parameters --harmony-destructuring
7 7
8 8
9 (function TestDefaults() { 9 (function TestDefaults() {
10 function f1(x = 1) { return x } 10 function f1(x = 1) { return x }
11 assertEquals(1, f1()); 11 assertEquals(1, f1());
12 assertEquals(1, f1(undefined)); 12 assertEquals(1, f1(undefined));
13 assertEquals(2, f1(2)); 13 assertEquals(2, f1(2));
14 assertEquals(null, f1(null)); 14 assertEquals(null, f1(null));
15 15
16 function f2(x, y = x) { return x + y; } 16 function f2(x, y = x) { return x + y; }
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 75
76 (function TestEvalInParameters() { 76 (function TestEvalInParameters() {
77 function f1(x = eval(0)) { return x } 77 function f1(x = eval(0)) { return x }
78 assertEquals(0, f1()); 78 assertEquals(0, f1());
79 function f2(x = () => eval(1)) { return x() } 79 function f2(x = () => eval(1)) { return x() }
80 assertEquals(1, f2()); 80 assertEquals(1, f2());
81 })(); 81 })();
82 82
83 83
84 (function TestParameterScoping() { 84 (function TestParameterScoping() {
85 // TODO(rossberg): Add checks for variable declarations in defaults.
86 var x = 1; 85 var x = 1;
87 86
88 function f1(a = x) { var x = 2; return a; } 87 function f1(a = x) { var x = 2; return a; }
89 assertEquals(1, f1()); 88 assertEquals(1, f1());
90 function f2(a = x) { function x() {}; return a; } 89 function f2(a = x) { function x() {}; return a; }
91 assertEquals(1, f2()); 90 assertEquals(1, f2());
92 function f3(a = x) { 'use strict'; let x = 2; return a; } 91 function f3(a = x) { 'use strict'; let x = 2; return a; }
93 assertEquals(1, f3()); 92 assertEquals(1, f3());
94 function f4(a = x) { 'use strict'; const x = 2; return a; } 93 function f4(a = x) { 'use strict'; const x = 2; return a; }
95 assertEquals(1, f4()); 94 assertEquals(1, f4());
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 assertSame(f15, f15()); 154 assertSame(f15, f15());
156 var f16 = function f(f = 7, x = f) { return x; } 155 var f16 = function f(f = 7, x = f) { return x; }
157 assertSame(7, f16()); 156 assertSame(7, f16());
158 157
159 var o1 = {f: function(x = this) { return x; }}; 158 var o1 = {f: function(x = this) { return x; }};
160 assertSame(o1, o1.f()); 159 assertSame(o1, o1.f());
161 assertSame(1, o1.f(1)); 160 assertSame(1, o1.f(1));
162 })(); 161 })();
163 162
164 163
164 (function TestSloppyEvalScoping() {
165 var x = 1;
166
167 function f1(y = eval("var x = 2")) { with ({}) { return x; } }
168 assertEquals(1, f1());
169 function f2(y = eval("var x = 2"), z = x) { return z; }
170 assertEquals(1, f2());
171 assertEquals(1, f2(0));
172 function f3(y = eval("var x = 2"), z = eval("x")) { return z; }
173 assertEquals(1, f3());
174 assertEquals(1, f3(0));
175 // TODO(rossberg): eval inside patterns is not recognized yet.
176 // function f41({[eval("var x = 2; 'a'")]: w}, z = x)) { return z; }
177 // assertEquals(1, f41({}));
178 // assertEquals(1, f41({a: 0}));
179 // function f42({[eval("var x = 2; 'a'")]: w}, z = eval("x")) { return z; }
180 // assertEquals(1, f42({}));
181 // assertEquals(1, f42({a: 0}));
182 // function f43({a: w = eval("var x = 2")}, z = x) { return z; }
183 // assertEquals(1, f43({}));
184 // assertEquals(1, f43({a: 0}));
185 // function f44({a: w = eval("var x = 2")}, z = eval("x")) { return z; }
186 // assertEquals(1, f44({}));
187 // assertEquals(1, f44({a: 0}));
188
189 function f5({a = eval("var x = 2"), b = x}) { return b; }
190 assertEquals(2, f5({}));
191 assertEquals(1, f5({a: 0}));
192 function f6({a = eval("var x = 2"), b = eval("x")}) { return b; }
193 assertEquals(2, f6({}));
194 assertEquals(1, f6({a: 0}));
195 function f71({[eval("var x = 2; 'a'")]: w, b = x}) { return b; }
196 assertEquals(2, f71({}));
197 assertEquals(2, f71({a: 0}));
198 function f72({[eval("var x = 2; 'a'")]: w, b = eval("x")}) { return b; }
199 assertEquals(2, f72({}));
200 assertEquals(2, f72({a: 0}));
201 function f73({a: w = eval("var x = 2"), b = x}) { return b; }
202 assertEquals(2, f73({}));
203 assertEquals(1, f73({a: 0}));
204 function f74({a: w = eval("var x = 2"), b = eval("x")}) { return b; }
205 assertEquals(2, f74({}));
206 assertEquals(1, f74({a: 0}));
207 function f8(y = (eval("var x = 2"), x)) { return y; }
208 assertEquals(2, f8());
209 assertEquals(0, f8(0));
210
211 function f11(z = eval("var y = 2")) { return y; }
212 assertThrows(f11, ReferenceError);
213 function f12(z = eval("var y = 2"), b = y) {}
214 assertThrows(f12, ReferenceError);
215 function f13(z = eval("var y = 2"), b = eval("y")) {}
216 assertThrows(f13, ReferenceError);
217
218 function f21(f = () => x) { eval("var x = 2"); return f() }
219 assertEquals(1, f21());
220 assertEquals(3, f21(() => 3));
221 function f22(f = () => eval("x")) { eval("var x = 2"); return f() }
222 assertEquals(1, f22());
223 assertEquals(3, f22(() => 3));
224 })();
225
226
227 (function TestStrictEvalScoping() {
228 'use strict';
229 var x = 1;
230
231 function f1(y = eval("var x = 2")) { return x; }
232 assertEquals(1, f1());
233 function f2(y = eval("var x = 2"), z = x) { return z; }
234 assertEquals(1, f2());
235 assertEquals(1, f2(0));
236 function f3(y = eval("var x = 2"), z = eval("x")) { return z; }
237 assertEquals(1, f3());
238 assertEquals(1, f3(0));
239 function f41({[eval("var x = 2; 'a'")]: w}, z = x) { return z; }
240 assertEquals(1, f41({}));
241 assertEquals(1, f41({a: 0}));
242 function f42({[eval("var x = 2; 'a'")]: w}, z = eval("x")) { return z; }
243 assertEquals(1, f42({}));
244 assertEquals(1, f42({a: 0}));
245 function f43({a: w = eval("var x = 2")}, z = x) { return z; }
246 assertEquals(1, f43({}));
247 assertEquals(1, f43({a: 0}));
248 function f44({a: w = eval("var x = 2")}, z = eval("x")) { return z; }
249 assertEquals(1, f44({}));
250 assertEquals(1, f44({a: 0}));
251
252 function f5({a = eval("var x = 2"), b = x}) { return b; }
253 assertEquals(1, f5({}));
254 assertEquals(1, f5({a: 0}));
255 function f6({a = eval("var x = 2"), b = eval("x")}) { return b; }
256 assertEquals(1, f6({}));
257 assertEquals(1, f6({a: 0}));
258 function f71({[eval("var x = 2; 'a'")]: w, b = x}) { return b; }
259 assertEquals(1, f71({}));
260 assertEquals(1, f71({a: 0}));
261 function f72({[eval("var x = 2; 'a'")]: w, b = eval("x")}) { return b; }
262 assertEquals(1, f72({}));
263 assertEquals(1, f72({a: 0}));
264 function f73({a: w = eval("var x = 2"), b = x}) { return b; }
265 assertEquals(1, f73({}));
266 assertEquals(1, f73({a: 0}));
267 function f74({a: w = eval("var x = 2"), b = eval("x")}) { return b; }
268 assertEquals(1, f74({}));
269 assertEquals(1, f74({a: 0}));
270 function f8(y = (eval("var x = 2"), x)) { return y; }
271 assertEquals(1, f8());
272 assertEquals(0, f8(0));
273
274 function f11(z = eval("var y = 2")) { return y; }
275 assertThrows(f11, ReferenceError);
276 function f12(z = eval("var y = 2"), b = y) {}
277 assertThrows(f12, ReferenceError);
278 function f13(z = eval("var y = 2"), b = eval("y")) {}
279 assertThrows(f13, ReferenceError);
280
281 function f21(f = () => x) { eval("var x = 2"); return f() }
282 assertEquals(1, f21());
283 assertEquals(3, f21(() => 3));
284 function f22(f = () => eval("x")) { eval("var x = 2"); return f() }
285 assertEquals(1, f22());
286 assertEquals(3, f22(() => 3));
287 })();
288
289
165 (function TestParameterTDZ() { 290 (function TestParameterTDZ() {
166 function f1(a = x, x) { return a } 291 function f1(a = x, x) { return a }
167 assertThrows(() => f1(undefined, 4), ReferenceError); 292 assertThrows(() => f1(undefined, 4), ReferenceError);
168 assertEquals(4, f1(4, 5)); 293 assertEquals(4, f1(4, 5));
169 function f2(a = eval("x"), x) { return a } 294 function f2(a = eval("x"), x) { return a }
170 assertThrows(() => f2(undefined, 4), ReferenceError); 295 assertThrows(() => f2(undefined, 4), ReferenceError);
171 assertEquals(4, f2(4, 5)); 296 assertEquals(4, f2(4, 5));
172 function f3(a = eval("x"), x) { 'use strict'; return a } 297 function f3(a = eval("x"), x) { 'use strict'; return a }
173 assertThrows(() => f3(undefined, 4), ReferenceError); 298 assertThrows(() => f3(undefined, 4), ReferenceError);
174 assertEquals(4, f3(4, 5)); 299 assertEquals(4, f3(4, 5));
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 // assertEquals(0, (function(x = 1, ...a) {}).length); 367 // assertEquals(0, (function(x = 1, ...a) {}).length);
243 // assertEquals(1, (function(x, y = 1) {}).length); 368 // assertEquals(1, (function(x, y = 1) {}).length);
244 // assertEquals(1, (function(x, y = 1, ...a) {}).length); 369 // assertEquals(1, (function(x, y = 1, ...a) {}).length);
245 // assertEquals(2, (function(x, y, z = 1) {}).length); 370 // assertEquals(2, (function(x, y, z = 1) {}).length);
246 // assertEquals(2, (function(x, y, z = 1, ...a) {}).length); 371 // assertEquals(2, (function(x, y, z = 1, ...a) {}).length);
247 // assertEquals(1, (function(x, y = 1, z) {}).length); 372 // assertEquals(1, (function(x, y = 1, z) {}).length);
248 // assertEquals(1, (function(x, y = 1, z, ...a) {}).length); 373 // assertEquals(1, (function(x, y = 1, z, ...a) {}).length);
249 // assertEquals(1, (function(x, y = 1, z, v = 2) {}).length); 374 // assertEquals(1, (function(x, y = 1, z, v = 2) {}).length);
250 // assertEquals(1, (function(x, y = 1, z, v = 2, ...a) {}).length); 375 // assertEquals(1, (function(x, y = 1, z, v = 2, ...a) {}).length);
251 })(); 376 })();
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