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

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

Issue 1917993004: [es8] Initial set of changes to support syntactic tail calls. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Addressing comments Created 4 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: test/mjsunit/es7/syntactic-tail-call.js
diff --git a/test/mjsunit/es6/tail-call.js b/test/mjsunit/es7/syntactic-tail-call.js
similarity index 82%
copy from test/mjsunit/es6/tail-call.js
copy to test/mjsunit/es7/syntactic-tail-call.js
index 318519b3551c0b939e9fdcbfef883c11c384708f..b65fc450590afff8f051e1323dad6a4ec38ceede 100644
--- a/test/mjsunit/es6/tail-call.js
+++ b/test/mjsunit/es7/syntactic-tail-call.js
@@ -2,8 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --allow-natives-syntax --harmony-tailcalls
-"use strict";
+// Flags: --allow-natives-syntax --harmony-explicit-tailcalls
Error.prepareStackTrace = (error,stack) => {
error.strace = stack;
@@ -39,28 +38,28 @@ function f_153(expected_call_stack, a) {
CheckStackTrace([f1, test]);
return 10 + a;
}
- function g1(a) { return f1(2); }
+ function g1(a) { return continue f1(2); }
// Caller has more arguments than callee.
function f2(a) {
CheckStackTrace([f2, test]);
return 10 + a;
}
- function g2(a, b, c) { return f2(2); }
+ function g2(a, b, c) { return continue f2(2); }
// Caller has less arguments than callee.
function f3(a, b, c) {
CheckStackTrace([f3, test]);
return 10 + a + b + c;
}
- function g3(a) { return f3(2, 3, 4); }
+ function g3(a) { return continue f3(2, 3, 4); }
// Callee has arguments adaptor frame.
function f4(a, b, c) {
CheckStackTrace([f4, test]);
return 10 + a;
}
- function g4(a) { return f4(2); }
+ function g4(a) { return continue f4(2); }
function test() {
assertEquals(12, g1(1));
@@ -82,28 +81,28 @@ function f_153(expected_call_stack, a) {
CheckStackTrace([f1, test]);
return 10 + a;
}
- function g1(a) { return f1(2); }
+ function g1(a) { return continue f1(2); }
// Caller has more arguments than callee.
function f2(a) {
CheckStackTrace([f2, test]);
return 10 + a;
}
- function g2(a, b, c) { return f2(2); }
+ function g2(a, b, c) { return continue f2(2); }
// Caller has less arguments than callee.
function f3(a, b, c) {
CheckStackTrace([f3, test]);
return 10 + a + b + c;
}
- function g3(a) { return f3(2, 3, 4); }
+ function g3(a) { return continue f3(2, 3, 4); }
// Callee has arguments adaptor frame.
function f4(a, b, c) {
CheckStackTrace([f4, test]);
return 10 + a;
}
- function g4(a) { return f4(2); }
+ function g4(a) { return continue f4(2); }
function test() {
assertEquals(12, g1());
@@ -128,7 +127,7 @@ function f_153(expected_call_stack, a) {
return 10 + a;
}
var b1 = f1.bind({a: 153});
- function g1(a) { return b1(2); }
+ function g1(a) { return continue b1(2); }
// Caller has more arguments than callee.
function f2(a) {
@@ -137,7 +136,7 @@ function f_153(expected_call_stack, a) {
return 10 + a;
}
var b2 = f2.bind({a: 153});
- function g2(a, b, c) { return b2(2); }
+ function g2(a, b, c) { return continue b2(2); }
// Caller has less arguments than callee.
function f3(a, b, c) {
@@ -146,7 +145,7 @@ function f_153(expected_call_stack, a) {
return 10 + a + b + c;
}
var b3 = f3.bind({a: 153});
- function g3(a) { return b3(2, 3, 4); }
+ function g3(a) { return continue b3(2, 3, 4); }
// Callee has arguments adaptor frame.
function f4(a, b, c) {
@@ -155,7 +154,7 @@ function f_153(expected_call_stack, a) {
return 10 + a;
}
var b4 = f4.bind({a: 153});
- function g4(a) { return b4(2); }
+ function g4(a) { return continue b4(2); }
function test() {
assertEquals(12, g1(1));
@@ -179,7 +178,7 @@ function f_153(expected_call_stack, a) {
return 10 + a;
}
var b1 = f1.bind({a: 153});
- function g1(a) { return b1(2); }
+ function g1(a) { return continue b1(2); }
// Caller has more arguments than callee.
function f2(a) {
@@ -188,7 +187,7 @@ function f_153(expected_call_stack, a) {
return 10 + a;
}
var b2 = f2.bind({a: 153});
- function g2(a, b, c) { return b2(2); }
+ function g2(a, b, c) { return continue b2(2); }
// Caller has less arguments than callee.
function f3(a, b, c) {
@@ -197,7 +196,7 @@ function f_153(expected_call_stack, a) {
return 10 + a + b + c;
}
var b3 = f3.bind({a: 153});
- function g3(a) { return b3(2, 3, 4); }
+ function g3(a) { return continue b3(2, 3, 4); }
// Callee has arguments adaptor frame.
function f4(a, b, c) {
@@ -206,7 +205,7 @@ function f_153(expected_call_stack, a) {
return 10 + a;
}
var b4 = f4.bind({a: 153});
- function g4(a) { return b4(2); }
+ function g4(a) { return continue b4(2); }
function test() {
assertEquals(12, g1());
@@ -224,15 +223,15 @@ function f_153(expected_call_stack, a) {
// Tail calling via various expressions.
(function() {
function g1(a) {
- return f([f, g1, test], false) || f([f, test], true);
+ return continue f([f, g1, test], false) || f([f, test], true);
}
function g2(a) {
- return f([f, g2, test], true) && f([f, test], true);
+ return continue f([f, g2, test], true) && f([f, test], true);
}
function g3(a) {
- return f([f, g3, test], 13), f([f, test], 153);
+ return continue f([f, g3, test], 13), f([f, test], 153);
}
function test() {
@@ -264,7 +263,7 @@ function f_153(expected_call_stack, a) {
throw new Error("boom");
} catch(e) {
f_153([f_153, tc2, test]);
- return f_153([f_153, test]);
+ return continue f_153([f_153, test]);
}
}
@@ -276,7 +275,7 @@ function f_153(expected_call_stack, a) {
f_153([f_153, tc3, test]);
}
f_153([f_153, tc3, test]);
- return f_153([f_153, test]);
+ return continue f_153([f_153, test]);
}
function test() {
@@ -308,7 +307,7 @@ function f_153(expected_call_stack, a) {
throw new Error("boom");
} finally {
f_153([f_153, tf2, test]);
- return f_153([f_153, test]);
+ return continue f_153([f_153, test]);
}
}
@@ -318,7 +317,7 @@ function f_153(expected_call_stack, a) {
} finally {
f_153([f_153, tf3, test]);
}
- return f_153([f_153, test]);
+ return continue f_153([f_153, test]);
}
function test() {
@@ -365,7 +364,7 @@ function f_153(expected_call_stack, a) {
f_153([f_153, tcf3, test]);
} finally {
f_153([f_153, tcf3, test]);
- return f_153([f_153, test]);
+ return continue f_153([f_153, test]);
}
}
@@ -378,7 +377,7 @@ function f_153(expected_call_stack, a) {
} finally {
f_153([f_153, tcf4, test]);
}
- return f_153([f_153, test]);
+ return continue f_153([f_153, test]);
}
function test() {
@@ -397,16 +396,25 @@ function f_153(expected_call_stack, a) {
// Test tail calls from arrow functions.
(function () {
function g1(a) {
- return (() => { return f_153([f_153, test]); })();
+ return continue (() => { return continue f_153([f_153, test]); })();
}
function g2(a) {
- return (() => f_153([f_153, test]))();
+ return continue (() => continue f_153([f_153, test]))();
+ }
+
+ function g3(a) {
+ var closure = () => continue f([f, closure, test], true)
+ ? f_153([f_153, test])
+ : f_153([f_153, test]);
+
+ return continue closure();
}
function test() {
assertEquals(153, g1());
assertEquals(153, g2());
+ assertEquals(153, g3());
}
test();
test();
« no previous file with comments | « test/message/syntactic-tail-call-in-try-try-catch-finally.out ('k') | test/mjsunit/es7/syntactic-tail-call-simple.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698