 Chromium Code Reviews
 Chromium Code Reviews Issue 1928203002:
  [es8] More spec compliant syntactic tail calls implementation.  (Closed) 
  Base URL: https://chromium.googlesource.com/v8/v8.git@master
    
  
    Issue 1928203002:
  [es8] More spec compliant syntactic tail calls implementation.  (Closed) 
  Base URL: https://chromium.googlesource.com/v8/v8.git@master| Index: test/mjsunit/es8/syntactic-tail-call.js | 
| diff --git a/test/mjsunit/es7/syntactic-tail-call.js b/test/mjsunit/es8/syntactic-tail-call.js | 
| similarity index 92% | 
| rename from test/mjsunit/es7/syntactic-tail-call.js | 
| rename to test/mjsunit/es8/syntactic-tail-call.js | 
| index b65fc450590afff8f051e1323dad6a4ec38ceede..4a8b7d163e0a478d41633c626cfd64abe0dcf2f0 100644 | 
| --- a/test/mjsunit/es7/syntactic-tail-call.js | 
| +++ b/test/mjsunit/es8/syntactic-tail-call.js | 
| @@ -3,6 +3,7 @@ | 
| // found in the LICENSE file. | 
| // Flags: --allow-natives-syntax --harmony-explicit-tailcalls | 
| +// Flags: --harmony-do-expressions | 
| Error.prepareStackTrace = (error,stack) => { | 
| error.strace = stack; | 
| @@ -223,15 +224,15 @@ function f_153(expected_call_stack, a) { | 
| // Tail calling via various expressions. | 
| 
rossberg
2016/05/04 10:45:30
Can you add tests where these cases nest? E.g.
a
 
Igor Sheludko
2016/05/04 11:50:14
Done.
 | 
| (function() { | 
| function g1(a) { | 
| - return continue f([f, g1, test], false) || f([f, test], true); | 
| + return f([f, g1, test], false) || continue f([f, test], true); | 
| } | 
| function g2(a) { | 
| - return continue f([f, g2, test], true) && f([f, test], true); | 
| + return f([f, g2, test], true) && continue f([f, test], true); | 
| } | 
| function g3(a) { | 
| - return continue f([f, g3, test], 13), f([f, test], 153); | 
| + return f([f, g3, test], 13), continue f([f, test], 153); | 
| } | 
| function test() { | 
| @@ -404,10 +405,9 @@ function f_153(expected_call_stack, a) { | 
| } | 
| function g3(a) { | 
| - var closure = () => continue f([f, closure, test], true) | 
| - ? f_153([f_153, test]) | 
| - : f_153([f_153, test]); | 
| - | 
| + var closure = () => f([f, closure, test], true) | 
| + ? continue f_153([f_153, test]) | 
| + : continue f_153([f_153, test]); | 
| return continue closure(); | 
| } | 
| @@ -421,3 +421,20 @@ function f_153(expected_call_stack, a) { | 
| %OptimizeFunctionOnNextCall(test); | 
| test(); | 
| })(); | 
| + | 
| + | 
| +// Test tail calls from do expressions. | 
| +(function () { | 
| + function g1(a) { | 
| + var a = do { return continue f_153([f_153, test]); 42; }; | 
| + return a; | 
| + } | 
| + | 
| + function test() { | 
| + assertEquals(153, g1()); | 
| + } | 
| + test(); | 
| + test(); | 
| + %OptimizeFunctionOnNextCall(test); | 
| + test(); | 
| +})(); |