зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1384299 - Provide better error message when errornous syntax possibly match "yield SOMETHING" outside generators. r=till
This commit is contained in:
Родитель
200d8ec18b
Коммит
9d87992821
|
@ -2929,6 +2929,10 @@ Parser<ParseHandler, CharT>::matchOrInsertSemicolonHelper(TokenStream::Modifier
|
|||
error(JSMSG_AWAIT_OUTSIDE_ASYNC);
|
||||
return false;
|
||||
}
|
||||
if (!yieldExpressionsSupported() && tokenStream.currentToken().type == TOK_YIELD) {
|
||||
error(JSMSG_YIELD_OUTSIDE_GENERATOR);
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Advance the scanner for proper error location reporting. */
|
||||
tokenStream.consumeKnownToken(tt, modifier);
|
||||
|
|
|
@ -353,6 +353,7 @@ MSG_DEF(JSMSG_WHILE_AFTER_DO, 0, JSEXN_SYNTAXERR, "missing while after
|
|||
MSG_DEF(JSMSG_YIELD_IN_ARROW, 0, JSEXN_SYNTAXERR, "arrow function may not contain yield")
|
||||
MSG_DEF(JSMSG_YIELD_IN_DEFAULT, 0, JSEXN_SYNTAXERR, "yield in default expression")
|
||||
MSG_DEF(JSMSG_YIELD_IN_METHOD, 0, JSEXN_SYNTAXERR, "non-generator method definitions may not contain yield")
|
||||
MSG_DEF(JSMSG_YIELD_OUTSIDE_GENERATOR, 0, JSEXN_SYNTAXERR, "yield expression is only valid in generators")
|
||||
MSG_DEF(JSMSG_BAD_COLUMN_NUMBER, 0, JSEXN_RANGEERR, "column number out of range")
|
||||
MSG_DEF(JSMSG_COMPUTED_NAME_IN_PATTERN,0, JSEXN_SYNTAXERR, "computed property names aren't supported in this destructuring declaration")
|
||||
MSG_DEF(JSMSG_DEFAULT_IN_PATTERN, 0, JSEXN_SYNTAXERR, "destructuring defaults aren't supported in this destructuring declaration")
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
var BUGNUMBER = 1384299;
|
||||
var summary = "yield outside of generators should provide better error";
|
||||
|
||||
print(BUGNUMBER + ": " + summary);
|
||||
|
||||
let caught = false;
|
||||
try {
|
||||
eval("yield 10");
|
||||
} catch(e) {
|
||||
assertEq(e.message, "yield expression is only valid in generators");
|
||||
caught = true;
|
||||
}
|
||||
assertEq(caught, true);
|
||||
|
||||
try {
|
||||
eval("function f() { yield 10; }");
|
||||
} catch(e) {
|
||||
assertEq(e.message, "yield expression is only valid in generators");
|
||||
caught = true;
|
||||
}
|
||||
assertEq(caught, true);
|
||||
|
||||
try {
|
||||
eval("async function f() { yield 10; }");
|
||||
} catch(e) {
|
||||
assertEq(e.message, "yield expression is only valid in generators");
|
||||
caught = true;
|
||||
}
|
||||
assertEq(caught, true);
|
||||
|
||||
if (typeof reportCompare === "function")
|
||||
reportCompare(true, true);
|
Загрузка…
Ссылка в новой задаче