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

Unified Diff: test/mjsunit/es8/syntactic-tail-call-parsing-sloppy.js

Issue 1955393002: [es8] Throw SyntaxError when tail call expressions occur in non-strict mode. (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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « test/mjsunit/es8/syntactic-tail-call-parsing.js ('k') | test/mjsunit/es8/syntactic-tail-call-simple.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-parsing-sloppy.js
diff --git a/test/mjsunit/es8/syntactic-tail-call-parsing.js b/test/mjsunit/es8/syntactic-tail-call-parsing-sloppy.js
similarity index 79%
copy from test/mjsunit/es8/syntactic-tail-call-parsing.js
copy to test/mjsunit/es8/syntactic-tail-call-parsing-sloppy.js
index 818e2b0b00633aeef7225383314f906ce7447ab2..d02608606d0267df52ce860388b7c5b7420863ee 100644
--- a/test/mjsunit/es8/syntactic-tail-call-parsing.js
+++ b/test/mjsunit/es8/syntactic-tail-call-parsing-sloppy.js
@@ -60,6 +60,16 @@ var SyntaxErrorTests = [
},
{ msg: "Tail call expression is not allowed here",
tests: [
+ { src: `class A {}; class B extends A { constructor() { return continue foo () ; } }`,
+ err: ` ^^^^^^^^^^^^^^^`,
+ },
+ { src: `class A extends continue f () {}; }`,
+ err: ` ^^^^^^^^^^^^^`,
+ },
+ ],
+ },
+ { msg: "Tail call expressions are not allowed in non-strict mode",
+ tests: [
{ src: `()=>{ return continue continue continue b() ; }`,
err: ` ^^^^^^^^^^^^`,
},
@@ -231,16 +241,6 @@ var SyntaxErrorTests = [
{ src: `()=>{ const c = continue foo() }`,
err: ` ^^^^^^^^^^^^^^^`,
},
- { src: `class A {}; class B extends A { constructor() { return continue super () ; } }`,
- err: ` ^^^^^^^^^^^^^^^^^`,
- },
- { src: `class A extends continue f () {}; }`,
- err: ` ^^^^^^^^^^^^^`,
- },
- ],
- },
- { msg: "Tail call expression in try block",
- tests: [
{ src: `()=>{ try { return continue f ( ) ; } catch(e) {} }`,
err: ` ^^^^^^^^^^^^^^^^`,
},
@@ -250,26 +250,87 @@ var SyntaxErrorTests = [
{ src: `()=>{ try { try { smth; } catch(e) { return continue f( ) ; } } finally { bla; } }`,
err: ` ^^^^^^^^^^^^^^`,
},
- ],
- },
- { msg: "Tail call expression in catch block when finally block is also present",
- tests: [
{ src: `()=>{ try { smth; } catch(e) { return continue f ( ) ; } finally { blah; } }`,
err: ` ^^^^^^^^^^^^^^^^`,
},
{ src: `()=>{ try { smth; } catch(e) { try { smth; } catch (e) { return continue f ( ) ; } } finally { blah; } }`,
err: ` ^^^^^^^^^^^^^^^^`,
},
- ],
- },
- { msg: "Tail call expression in for-in/of body",
- tests: [
{ src: `()=>{ for (var v in {a:0}) { return continue foo () ; } }`,
err: ` ^^^^^^^^^^^^^^^^`,
},
{ src: `()=>{ for (var v of [1, 2, 3]) { return continue foo () ; } }`,
err: ` ^^^^^^^^^^^^^^^^`,
},
+ { src: `()=>{ return continue a.b.c.foo () ; }`,
+ err: ` ^^^^^^^^^^^^^^^^^^^^^^`,
+ },
+ { src: `()=>{ return continue a().b.c().d.foo () ; }`,
+ err: ` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^`,
+ },
+ { src: `()=>{ return continue foo (1)(2)(3, 4) ; }`,
+ err: ` ^^^^^^^^^^^^^^^^^^^^^^^^^^`,
+ },
+ { src: `()=>{ return ( continue b() ) ; }`,
+ err: ` ^^^^^^^^^^^^`,
+ },
+ { src: "()=>{ return continue bar`ab cd ef` ; }",
+ err: ` ^^^^^^^^^^^^^^^^^^^^^^`,
+ },
+ { src: "()=>{ return continue bar`ab ${cd} ef` ; }",
+ err: ` ^^^^^^^^^^^^^^^^^^^^^^^^^`,
+ },
+ { src: `()=>{ return a || continue f() ; }`,
+ err: ` ^^^^^^^^^^^^`,
+ },
+ { src: `()=>{ return a && continue f() ; }`,
+ err: ` ^^^^^^^^^^^^`,
+ },
+ { src: `()=>{ return a , continue f() ; }`,
+ err: ` ^^^^^^^^^^^^`,
+ },
+ { src: `()=>{ function* G() { return continue foo(); } }`,
+ err: ` ^^^^^^^^^^^^^^`,
+ },
+ { src: `()=>{ function B() { return continue new.target() ; } }`,
+ err: ` ^^^^^^^^^^^^^^^^^^^^^`,
+ },
+ { src: `()=>{ return continue do { x ? foo() : bar() ; }() }`,
+ err: ` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^`,
+ },
+ { src: `()=>{ return continue (do { x ? foo() : bar() ; })() }`,
+ err: ` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^`,
+ },
+ { src: `()=>{ return do { 1, continue foo() } }`,
+ err: ` ^^^^^^^^^^^^^^`,
+ },
+ { src: `()=>{ return do { x ? continue foo() : y } }`,
+ err: ` ^^^^^^^^^^^^^^`,
+ },
+ { src: `()=>{ return a || (b && continue c()); }`,
+ err: ` ^^^^^^^^^^^^`,
+ },
+ { src: `()=>{ return a && (b || continue c()); }`,
+ err: ` ^^^^^^^^^^^^`,
+ },
+ { src: `()=>{ return a || (b ? c : continue d()); }`,
+ err: ` ^^^^^^^^^^^^`,
+ },
+ { src: `()=>{ return 1, 2, 3, a || (b ? c : continue d()); }`,
+ err: ` ^^^^^^^^^^^^`,
+ },
+ { src: `()=> continue (foo ()) ;`,
+ err: ` ^^^^^^^^^^^^^^^^^^`,
+ },
+ { src: `()=> a || continue foo () ;`,
+ err: ` ^^^^^^^^^^^^^^^^`,
+ },
+ { src: `()=> a && continue foo () ;`,
+ err: ` ^^^^^^^^^^^^^^^^`,
+ },
+ { src: `()=> a ? continue foo () : b;`,
+ err: ` ^^^^^^^^^^^^^^^^`,
+ },
],
},
{ msg: "Undefined label 'foo'",
@@ -284,37 +345,17 @@ var SyntaxErrorTests = [
// Should parse successfully.
var NoErrorTests = [
- `()=>{ return continue a.b.c.foo () ; }`,
- `()=>{ return continue a().b.c().d.foo () ; }`,
- `()=>{ return continue foo (1)(2)(3, 4) ; }`,
- `()=>{ return ( continue b() ) ; }`,
- "()=>{ return continue bar`ab cd ef` ; }",
- "()=>{ return continue bar`ab ${cd} ef` ; }",
- `()=>{ return a || continue f() ; }`,
- `()=>{ return a && continue f() ; }`,
- `()=>{ return a , continue f() ; }`,
- `()=>{ function* G() { return continue foo(); } }`,
`()=>{ class A { foo() { return continue super.f() ; } } }`,
- `()=>{ function B() { return continue new.target() ; } }`,
- `()=>{ return continue do { x ? foo() : bar() ; }() }`,
- `()=>{ return continue (do { x ? foo() : bar() ; })() }`,
- `()=>{ return do { 1, continue foo() } }`,
- `()=>{ return do { x ? continue foo() : y } }`,
- `()=>{ return a || (b && continue c()); }`,
- `()=>{ return a && (b || continue c()); }`,
- `()=>{ return a || (b ? c : continue d()); }`,
- `()=>{ return 1, 2, 3, a || (b ? c : continue d()); }`,
- `()=> continue (foo ()) ;`,
- `()=> a || continue foo () ;`,
- `()=> a && continue foo () ;`,
- `()=> a ? continue foo () : b;`,
+ `()=>{ class A { foo() { return continue f() ; } } }`,
+ `()=>{ class A { foo() { return a || continue f() ; } } }`,
+ `()=>{ class A { foo() { return b && continue f() ; } } }`,
];
(function() {
- for (test_set of SyntaxErrorTests) {
+ for (var test_set of SyntaxErrorTests) {
var expected_message = "SyntaxError: " + test_set.msg;
- for (test of test_set.tests) {
+ for (var test of test_set.tests) {
var passed = true;
var e = null;
try {
@@ -359,7 +400,7 @@ var NoErrorTests = [
(function() {
- for (src of NoErrorTests) {
+ for (var src of NoErrorTests) {
print("=======================================");
print("Source | " + src);
Realm.eval(0, src);
« no previous file with comments | « test/mjsunit/es8/syntactic-tail-call-parsing.js ('k') | test/mjsunit/es8/syntactic-tail-call-simple.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698