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

Unified Diff: test/mjsunit/es8/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: Some STC tests ported for PTC 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « test/mjsunit/es7/syntactic-tail-call-simple.js ('k') | test/mjsunit/es8/syntactic-tail-call-parsing.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 81%
rename from test/mjsunit/es7/syntactic-tail-call.js
rename to test/mjsunit/es8/syntactic-tail-call.js
index b65fc450590afff8f051e1323dad6a4ec38ceede..f45caf21835c045ab3f5b25e055efc794d886891 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,21 +224,68 @@ function f_153(expected_call_stack, a) {
// Tail calling via various expressions.
(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 g4(a) {
+ return f([f, g4, test], false) ||
+ (f([f, g4, test], true) && continue f([f, test], true));
+ }
+
+ function g5(a) {
+ return f([f, g5, test], true) &&
+ (f([f, g5, test], false) || continue f([f, test], true));
+ }
+
+ function g6(a) {
+ return f([f, g6, test], 13), f([f, g6, test], 42),
+ continue f([f, test], 153);
+ }
+
+ function g7(a) {
+ return f([f, g7, test], false) ||
+ (f([f, g7, test], false) ? continue f([f, test], true)
+ : continue f([f, test], true));
+ }
+
+ function g8(a) {
+ return f([f, g8, test], false) || f([f, g8, test], true) &&
+ continue f([f, test], true);
+ }
+
+ function g9(a) {
+ return f([f, g9, test], true) && f([f, g9, test], false) ||
+ continue f([f, test], true);
+ }
+
+ function g10(a) {
+ return f([f, g10, test], true) && f([f, g10, test], false) ||
+ f([f, g10, test], true) ?
+ f([f, g10, test], true) && f([f, g10, test], false) ||
+ continue f([f, test], true) :
+ f([f, g10, test], true) && f([f, g10, test], false) ||
+ continue f([f, test], true);
}
function test() {
assertEquals(true, g1());
assertEquals(true, g2());
assertEquals(153, g3());
+ assertEquals(true, g4());
+ assertEquals(true, g5());
+ assertEquals(153, g6());
+ assertEquals(true, g7());
+ assertEquals(true, g8());
+ assertEquals(true, g9());
+ assertEquals(true, g10());
}
test();
test();
@@ -404,10 +452,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 +468,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();
+})();
« no previous file with comments | « test/mjsunit/es7/syntactic-tail-call-simple.js ('k') | test/mjsunit/es8/syntactic-tail-call-parsing.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698