mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-08-15 08:53:07 +09:00
Introduce Parser::errorAt
This reduces reporting an error at a particular offset to its bare essentials, simplifying calls.
This commit is contained in:
parent
9191d0d06b
commit
07c1fa20ea
2 changed files with 42 additions and 32 deletions
|
|
@ -608,6 +608,20 @@ Parser<ParseHandler>::error(unsigned errorNumber, ...)
|
|||
va_end(args);
|
||||
}
|
||||
|
||||
template <typename ParseHandler>
|
||||
void
|
||||
Parser<ParseHandler>::errorAt(uint32_t offset, unsigned errorNumber, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, errorNumber);
|
||||
#ifdef DEBUG
|
||||
bool result =
|
||||
#endif
|
||||
reportHelper(ParseError, false, offset, errorNumber, args);
|
||||
MOZ_ASSERT(!result, "reporting an error returned true?");
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
template <typename ParseHandler>
|
||||
bool
|
||||
Parser<ParseHandler>::warning(unsigned errorNumber, ...)
|
||||
|
|
@ -940,8 +954,7 @@ Parser<ParseHandler>::checkStrictBinding(PropertyName* name, TokenPos pos)
|
|||
JSAutoByteString bytes;
|
||||
if (!AtomToPrintableString(context, name, &bytes))
|
||||
return false;
|
||||
return reportWithOffset(ParseStrictError, pc->sc()->strict(), pos.begin,
|
||||
JSMSG_BAD_BINDING, bytes.ptr());
|
||||
return strictModeErrorAt(pos.begin, JSMSG_BAD_BINDING, bytes.ptr());
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
@ -977,8 +990,7 @@ Parser<ParseHandler>::reportRedeclaration(HandlePropertyName name, DeclarationKi
|
|||
JSAutoByteString bytes;
|
||||
if (!AtomToPrintableString(context, name, &bytes))
|
||||
return;
|
||||
reportWithOffset(ParseError, false, pos.begin, JSMSG_REDECLARED_VAR,
|
||||
DeclarationKindString(kind), bytes.ptr());
|
||||
errorAt(pos.begin, JSMSG_REDECLARED_VAR, DeclarationKindString(kind), bytes.ptr());
|
||||
}
|
||||
|
||||
// notePositionalFormalParameter is called for both the arguments of a regular
|
||||
|
|
@ -1247,11 +1259,11 @@ Parser<ParseHandler>::checkLexicalDeclarationDirectlyWithinBlock(ParseContext::S
|
|||
if (!StatementKindIsBraced(stmt.kind()) &&
|
||||
stmt.kind() != StatementKind::ForLoopLexicalHead)
|
||||
{
|
||||
reportWithOffset(ParseError, false, pos.begin,
|
||||
stmt.kind() == StatementKind::Label
|
||||
? JSMSG_LEXICAL_DECL_LABEL
|
||||
: JSMSG_LEXICAL_DECL_NOT_IN_BLOCK,
|
||||
DeclarationKindString(kind));
|
||||
errorAt(pos.begin,
|
||||
stmt.kind() == StatementKind::Label
|
||||
? JSMSG_LEXICAL_DECL_LABEL
|
||||
: JSMSG_LEXICAL_DECL_NOT_IN_BLOCK,
|
||||
DeclarationKindString(kind));
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -1341,7 +1353,7 @@ Parser<ParseHandler>::noteDeclaredName(HandlePropertyName name, DeclarationKind
|
|||
// contain 'let'. (CatchParameter is the only lexical binding form
|
||||
// without this restriction.)
|
||||
if (name == context->names().let) {
|
||||
reportWithOffset(ParseError, false, pos.begin, JSMSG_LEXICAL_DECL_DEFINES_LET);
|
||||
errorAt(pos.begin, JSMSG_LEXICAL_DECL_DEFINES_LET);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -3730,7 +3742,7 @@ Parser<ParseHandler>::checkUnescapedName()
|
|||
if (!token.nameContainsEscape())
|
||||
return true;
|
||||
|
||||
reportWithOffset(ParseError, false, token.pos.begin, JSMSG_ESCAPED_KEYWORD);
|
||||
errorAt(token.pos.begin, JSMSG_ESCAPED_KEYWORD);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -3840,8 +3852,7 @@ Parser<ParseHandler>::maybeParseDirective(Node list, Node possibleDirective, boo
|
|||
: funbox->hasParameterExprs
|
||||
? "default"
|
||||
: "rest";
|
||||
reportWithOffset(ParseError, false, directivePos.begin,
|
||||
JSMSG_STRICT_NON_SIMPLE_PARAMS, parameterKind);
|
||||
errorAt(directivePos.begin, JSMSG_STRICT_NON_SIMPLE_PARAMS, parameterKind);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -4038,7 +4049,7 @@ Parser<ParseHandler>::PossibleError::checkForError(ErrorKind kind)
|
|||
return true;
|
||||
|
||||
Error& err = error(kind);
|
||||
parser_.reportWithOffset(ParseError, false, err.offset_, err.errorNumber_);
|
||||
parser_.errorAt(err.offset_, err.errorNumber_);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -4327,11 +4338,11 @@ Parser<ParseHandler>::destructuringDeclarationWithoutYieldOrAwait(DeclarationKin
|
|||
Node res = destructuringDeclaration(kind, yieldHandling, tt);
|
||||
if (res) {
|
||||
if (pc->lastYieldOffset != startYieldOffset) {
|
||||
reportWithOffset(ParseError, false, pc->lastYieldOffset, JSMSG_YIELD_IN_DEFAULT);
|
||||
errorAt(pc->lastYieldOffset, JSMSG_YIELD_IN_DEFAULT);
|
||||
return null();
|
||||
}
|
||||
if (pc->lastAwaitOffset != startAwaitOffset) {
|
||||
reportWithOffset(ParseError, false, pc->lastAwaitOffset, JSMSG_AWAIT_IN_DEFAULT);
|
||||
errorAt(pc->lastAwaitOffset, JSMSG_AWAIT_IN_DEFAULT);
|
||||
return null();
|
||||
}
|
||||
}
|
||||
|
|
@ -4779,7 +4790,7 @@ Parser<FullParseHandler>::namedImportsOrNamespaceImport(TokenKind tt, Node impor
|
|||
return false;
|
||||
|
||||
if (tt != TOK_NAME || tokenStream.currentName() != context->names().as) {
|
||||
reportWithOffset(ParseError, false, pos().begin, JSMSG_AS_AFTER_IMPORT_STAR);
|
||||
error(JSMSG_AS_AFTER_IMPORT_STAR);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -5662,7 +5673,7 @@ Parser<ParseHandler>::forStatement(YieldHandling yieldHandling)
|
|||
Node init = startNode;
|
||||
|
||||
if (isForEach) {
|
||||
reportWithOffset(ParseError, false, begin, JSMSG_BAD_FOR_EACH_LOOP);
|
||||
errorAt(begin, JSMSG_BAD_FOR_EACH_LOOP);
|
||||
return null();
|
||||
}
|
||||
|
||||
|
|
@ -5897,7 +5908,7 @@ Parser<ParseHandler>::continueStatement(YieldHandling yieldHandling)
|
|||
if (foundLoop)
|
||||
error(JSMSG_LABEL_NOT_FOUND);
|
||||
else
|
||||
reportWithOffset(ParseError, false, begin, JSMSG_BAD_CONTINUE);
|
||||
errorAt(begin, JSMSG_BAD_CONTINUE);
|
||||
return null();
|
||||
}
|
||||
|
||||
|
|
@ -5956,7 +5967,7 @@ Parser<ParseHandler>::breakStatement(YieldHandling yieldHandling)
|
|||
};
|
||||
|
||||
if (!pc->findInnermostStatement(isBreakTarget)) {
|
||||
reportWithOffset(ParseError, false, begin, JSMSG_TOUGH_BREAK);
|
||||
errorAt(begin, JSMSG_TOUGH_BREAK);
|
||||
return null();
|
||||
}
|
||||
}
|
||||
|
|
@ -6111,8 +6122,7 @@ Parser<ParseHandler>::yieldExpression(InHandling inHandling)
|
|||
}
|
||||
|
||||
if (pc->functionBox()->isArrow()) {
|
||||
reportWithOffset(ParseError, false, begin,
|
||||
JSMSG_YIELD_IN_ARROW, js_yield_str);
|
||||
errorAt(begin, JSMSG_YIELD_IN_ARROW, js_yield_str);
|
||||
return null();
|
||||
}
|
||||
|
||||
|
|
@ -6120,8 +6130,7 @@ Parser<ParseHandler>::yieldExpression(InHandling inHandling)
|
|||
pc->functionBox()->function()->isGetter() ||
|
||||
pc->functionBox()->function()->isSetter())
|
||||
{
|
||||
reportWithOffset(ParseError, false, begin,
|
||||
JSMSG_YIELD_IN_METHOD, js_yield_str);
|
||||
errorAt(begin, JSMSG_YIELD_IN_METHOD, js_yield_str);
|
||||
return null();
|
||||
}
|
||||
|
||||
|
|
@ -6266,7 +6275,7 @@ Parser<ParseHandler>::labeledStatement(YieldHandling yieldHandling)
|
|||
uint32_t begin = pos().begin;
|
||||
|
||||
if (pc->findInnermostStatement<ParseContext::LabelStatement>(hasSameLabel)) {
|
||||
reportWithOffset(ParseError, false, begin, JSMSG_DUPLICATE_LABEL);
|
||||
errorAt(begin, JSMSG_DUPLICATE_LABEL);
|
||||
return null();
|
||||
}
|
||||
|
||||
|
|
@ -8297,8 +8306,7 @@ Parser<ParseHandler>::comprehension(GeneratorKind comprehensionKind)
|
|||
return null();
|
||||
|
||||
if (comprehensionKind != NotGenerator && pc->lastYieldOffset != startYieldOffset) {
|
||||
reportWithOffset(ParseError, false, pc->lastYieldOffset,
|
||||
JSMSG_BAD_GENEXP_BODY, js_yield_str);
|
||||
errorAt(pc->lastYieldOffset, JSMSG_BAD_GENEXP_BODY, js_yield_str);
|
||||
return null();
|
||||
}
|
||||
|
||||
|
|
@ -8360,11 +8368,11 @@ Parser<ParseHandler>::assignExprWithoutYieldOrAwait(YieldHandling yieldHandling)
|
|||
Node res = assignExpr(InAllowed, yieldHandling, TripledotProhibited);
|
||||
if (res) {
|
||||
if (pc->lastYieldOffset != startYieldOffset) {
|
||||
reportWithOffset(ParseError, false, pc->lastYieldOffset, JSMSG_YIELD_IN_DEFAULT);
|
||||
errorAt(pc->lastYieldOffset, JSMSG_YIELD_IN_DEFAULT);
|
||||
return null();
|
||||
}
|
||||
if (pc->lastAwaitOffset != startAwaitOffset) {
|
||||
reportWithOffset(ParseError, false, pc->lastAwaitOffset, JSMSG_AWAIT_IN_DEFAULT);
|
||||
errorAt(pc->lastAwaitOffset, JSMSG_AWAIT_IN_DEFAULT);
|
||||
return null();
|
||||
}
|
||||
}
|
||||
|
|
@ -9211,8 +9219,7 @@ Parser<ParseHandler>::objectLiteral(YieldHandling yieldHandling, PossibleError*
|
|||
// Directly report the error when we're not in a
|
||||
// destructuring context.
|
||||
if (!possibleError) {
|
||||
reportWithOffset(ParseError, false, namePos.begin,
|
||||
JSMSG_DUPLICATE_PROTO_PROPERTY);
|
||||
errorAt(namePos.begin, JSMSG_DUPLICATE_PROTO_PROPERTY);
|
||||
return null();
|
||||
}
|
||||
|
||||
|
|
@ -9459,7 +9466,7 @@ Parser<ParseHandler>::tryNewTarget(Node &newTarget)
|
|||
return false;
|
||||
|
||||
if (!pc->sc()->allowNewTarget()) {
|
||||
reportWithOffset(ParseError, false, begin, JSMSG_BAD_NEWTARGET);
|
||||
errorAt(begin, JSMSG_BAD_NEWTARGET);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -915,6 +915,9 @@ class Parser final : private JS::AutoGCRooter, public StrictModeGetter
|
|||
/* Report the given error at the current offset. */
|
||||
void error(unsigned errorNumber, ...);
|
||||
|
||||
/* Report the given error at the given offset. */
|
||||
void errorAt(uint32_t offset, unsigned errorNumber, ...);
|
||||
|
||||
/*
|
||||
* Handle a strict mode error at the current offset. Report an error if in
|
||||
* strict mode code, or warn if not, using the given error number and
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue