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

Side by Side Diff: test/mjsunit/es7/syntactic-tail-call.js

Issue 1928203002: [es8] More spec compliant syntactic tail calls implementation. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 7 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
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 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: --allow-natives-syntax --harmony-explicit-tailcalls 5 // Flags: --allow-natives-syntax --harmony-explicit-tailcalls
6 6
7 Error.prepareStackTrace = (error,stack) => { 7 Error.prepareStackTrace = (error,stack) => {
8 error.strace = stack; 8 error.strace = stack;
9 return error.message + "\n at " + stack.join("\n at "); 9 return error.message + "\n at " + stack.join("\n at ");
10 } 10 }
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 test(); 216 test();
217 test(); 217 test();
218 %OptimizeFunctionOnNextCall(test); 218 %OptimizeFunctionOnNextCall(test);
219 test(); 219 test();
220 })(); 220 })();
221 221
222 222
223 // Tail calling via various expressions. 223 // Tail calling via various expressions.
224 (function() { 224 (function() {
225 function g1(a) { 225 function g1(a) {
226 return continue f([f, g1, test], false) || f([f, test], true); 226 return f([f, g1, test], false) || continue f([f, test], true);
227 } 227 }
228 228
229 function g2(a) { 229 function g2(a) {
230 return continue f([f, g2, test], true) && f([f, test], true); 230 return f([f, g2, test], true) && continue f([f, test], true);
231 } 231 }
232 232
233 function g3(a) { 233 function g3(a) {
234 return continue f([f, g3, test], 13), f([f, test], 153); 234 return f([f, g3, test], 13), continue f([f, test], 153);
235 } 235 }
236 236
237 function test() { 237 function test() {
238 assertEquals(true, g1()); 238 assertEquals(true, g1());
239 assertEquals(true, g2()); 239 assertEquals(true, g2());
240 assertEquals(153, g3()); 240 assertEquals(153, g3());
241 } 241 }
242 test(); 242 test();
243 test(); 243 test();
244 %OptimizeFunctionOnNextCall(test); 244 %OptimizeFunctionOnNextCall(test);
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 (function () { 397 (function () {
398 function g1(a) { 398 function g1(a) {
399 return continue (() => { return continue f_153([f_153, test]); })(); 399 return continue (() => { return continue f_153([f_153, test]); })();
400 } 400 }
401 401
402 function g2(a) { 402 function g2(a) {
403 return continue (() => continue f_153([f_153, test]))(); 403 return continue (() => continue f_153([f_153, test]))();
404 } 404 }
405 405
406 function g3(a) { 406 function g3(a) {
407 var closure = () => continue f([f, closure, test], true) 407 var closure = () => f([f, closure, test], true)
408 ? f_153([f_153, test]) 408 ? continue f_153([f_153, test])
409 : f_153([f_153, test]); 409 : f_153([f_153, test]);
rossberg 2016/05/02 10:59:40 Shouldn't you need a `continue` here, too, to be e
Igor Sheludko 2016/05/04 10:28:55 The call f([f, closure, test], true) returns true.
410
411 return continue closure(); 410 return continue closure();
412 } 411 }
413 412
414 function test() { 413 function test() {
415 assertEquals(153, g1()); 414 assertEquals(153, g1());
416 assertEquals(153, g2()); 415 assertEquals(153, g2());
417 assertEquals(153, g3()); 416 assertEquals(153, g3());
418 } 417 }
419 test(); 418 test();
420 test(); 419 test();
421 %OptimizeFunctionOnNextCall(test); 420 %OptimizeFunctionOnNextCall(test);
422 test(); 421 test();
423 })(); 422 })();
OLDNEW
« src/parsing/parser-base.h ('K') | « test/message/syntactic-tail-call-without-return.out ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698