Bug 1185106 - Part 6.3: Add parser test for yield in async function expression. r=till
MozReview-Commit-ID: CovUsWjP1ER
--- a/js/src/tests/ecma_7/AsyncFunctions/yield.js
+++ b/js/src/tests/ecma_7/AsyncFunctions/yield.js
@@ -1,33 +1,44 @@
var BUGNUMBER = 1185106;
var summary = "yield handling in async function";
print(BUGNUMBER + ": " + summary);
function testPassArgsBody(argsbody) {
Reflect.parse(`async function a${argsbody}`);
+ Reflect.parse(`(async function a${argsbody})`);
+ Reflect.parse(`(async function ${argsbody})`);
}
function testErrorArgsBody(argsbody, prefix="") {
assertThrows(() => Reflect.parse(`${prefix} async function a${argsbody}`), SyntaxError);
+ assertThrows(() => Reflect.parse(`${prefix} (async function a${argsbody})`), SyntaxError);
+ assertThrows(() => Reflect.parse(`${prefix} (async function ${argsbody})`), SyntaxError);
}
function testErrorArgsBodyStrict(argsbody) {
testErrorArgsBody(argsbody);
testErrorArgsBody(argsbody, "'use strict'; ");
}
if (asyncFunctionsEnabled() && typeof Reflect !== "undefined" && Reflect.parse) {
// `yield` handling is inherited in async function declaration name.
Reflect.parse("async function yield() {}");
Reflect.parse("function f() { async function yield() {} }");
assertThrows(() => Reflect.parse("function* g() { async function yield() {} }"), SyntaxError);
assertThrows(() => Reflect.parse("'use strict'; async function yield() {}"), SyntaxError);
+ // `yield` is treated as an identifier in an async function expression name.
+ // `yield` is not allowed as an identifier in strict code.
+ Reflect.parse("(async function yield() {});");
+ Reflect.parse("function f() { (async function yield() {}); }");
+ Reflect.parse("function* g() { (async function yield() {}); }");
+ assertThrows(() => Reflect.parse("'use strict'; (async function yield() {});"), SyntaxError);
+
// `yield` is treated as an identifier in an async function parameter
// `yield` is not allowed as an identifier in strict code.
testPassArgsBody("(yield) {}");
testPassArgsBody("(yield = 1) {}");
testPassArgsBody("(a = yield) {}");
testErrorArgsBodyStrict("(yield 3) {}");
testErrorArgsBodyStrict("(a = yield 3) {}");