зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1424394 - Split Parser::reportNoOffset into Parser::{error,warning}NoOffset. r=arai
--HG-- extra : rebase_source : b0a9a905cb236a29dea8fd8420d935f8e1257c2a
This commit is contained in:
Родитель
7941d1eed0
Коммит
cb0c7b62e2
|
@ -3524,8 +3524,8 @@ BytecodeEmitter::maybeSetSourceMap()
|
|||
if (parser.options().sourceMapURL()) {
|
||||
// Warn about the replacement, but use the new one.
|
||||
if (parser.ss()->hasSourceMapURL()) {
|
||||
if (!parser.reportNoOffset(ParseWarning, false, JSMSG_ALREADY_HAS_PRAGMA,
|
||||
parser.ss()->filename(), "//# sourceMappingURL"))
|
||||
if (!parser.warningNoOffset(JSMSG_ALREADY_HAS_PRAGMA,
|
||||
parser.ss()->filename(), "//# sourceMappingURL"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -255,8 +255,8 @@ class EitherParser
|
|||
}
|
||||
|
||||
template<typename... Args>
|
||||
MOZ_MUST_USE bool reportNoOffset(Args&&... args) {
|
||||
return parser.match(detail::ParserBaseMatcher()).reportNoOffset(mozilla::Forward<Args>(args)...);
|
||||
MOZ_MUST_USE bool warningNoOffset(Args&&... args) {
|
||||
return parser.match(detail::ParserBaseMatcher()).warningNoOffset(mozilla::Forward<Args>(args)...);
|
||||
}
|
||||
|
||||
template<typename... Args>
|
||||
|
|
|
@ -744,44 +744,36 @@ Parser<ParseHandler, CharT>::strictModeErrorAt(uint32_t offset, unsigned errorNu
|
|||
}
|
||||
|
||||
bool
|
||||
ParserBase::reportNoOffset(ParseReportKind kind, bool strict, unsigned errorNumber, ...)
|
||||
ParserBase::warningNoOffset(unsigned errorNumber, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, errorNumber);
|
||||
|
||||
bool result = false;
|
||||
switch (kind) {
|
||||
case ParseError:
|
||||
case ParseWarning: {
|
||||
ErrorMetadata metadata;
|
||||
tokenStream.computeErrorMetadataNoOffset(&metadata);
|
||||
ErrorMetadata metadata;
|
||||
tokenStream.computeErrorMetadataNoOffset(&metadata);
|
||||
|
||||
if (kind == ParseError) {
|
||||
ReportCompileError(context, Move(metadata), nullptr, JSREPORT_ERROR, errorNumber,
|
||||
args);
|
||||
MOZ_ASSERT(!result);
|
||||
} else {
|
||||
result =
|
||||
tokenStream.compileWarning(Move(metadata), nullptr, JSREPORT_WARNING, errorNumber,
|
||||
args);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case ParseExtraWarning:
|
||||
result = tokenStream.reportExtraWarningErrorNumberVA(nullptr, TokenStream::NoOffset,
|
||||
errorNumber, &args);
|
||||
break;
|
||||
case ParseStrictError:
|
||||
result = tokenStream.reportStrictModeErrorNumberVA(nullptr, TokenStream::NoOffset, strict,
|
||||
errorNumber, &args);
|
||||
break;
|
||||
}
|
||||
bool result =
|
||||
tokenStream.compileWarning(Move(metadata), nullptr, JSREPORT_WARNING, errorNumber,
|
||||
args);
|
||||
|
||||
va_end(args);
|
||||
return result;
|
||||
}
|
||||
|
||||
void
|
||||
ParserBase::errorNoOffset(unsigned errorNumber, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, errorNumber);
|
||||
|
||||
ErrorMetadata metadata;
|
||||
tokenStream.computeErrorMetadataNoOffset(&metadata);
|
||||
|
||||
ReportCompileError(context, Move(metadata), nullptr, JSREPORT_ERROR, errorNumber, args);
|
||||
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
#define ABORTED_SYNTAX_PARSE_SENTINEL (SyntaxParser*)(0x1)
|
||||
|
||||
template <>
|
||||
|
|
|
@ -187,7 +187,8 @@ class ParserBase : public StrictModeGetter
|
|||
|
||||
bool isUnexpectedEOF() const { return isUnexpectedEOF_; }
|
||||
|
||||
bool reportNoOffset(ParseReportKind kind, bool strict, unsigned errorNumber, ...);
|
||||
MOZ_MUST_USE bool warningNoOffset(unsigned errorNumber, ...);
|
||||
void errorNoOffset(unsigned errorNumber, ...);
|
||||
|
||||
bool isValidStrictBinding(PropertyName* name);
|
||||
|
||||
|
|
|
@ -8667,13 +8667,23 @@ NoExceptionPending(JSContext* cx)
|
|||
}
|
||||
|
||||
static bool
|
||||
Warn(AsmJSParser& parser, int errorNumber, const char* str)
|
||||
SuccessfulValidation(AsmJSParser& parser, UniqueChars str)
|
||||
{
|
||||
ParseReportKind reportKind = parser.options().throwOnAsmJSValidationFailureOption &&
|
||||
errorNumber == JSMSG_USE_ASM_TYPE_FAIL
|
||||
? ParseError
|
||||
: ParseWarning;
|
||||
parser.reportNoOffset(reportKind, /* strict = */ false, errorNumber, str ? str : "");
|
||||
return parser.warningNoOffset(JSMSG_USE_ASM_TYPE_OK, str.get());
|
||||
}
|
||||
|
||||
static bool
|
||||
TypeFailureWarning(AsmJSParser& parser, const char* str)
|
||||
{
|
||||
if (parser.options().throwOnAsmJSValidationFailureOption) {
|
||||
parser.errorNoOffset(JSMSG_USE_ASM_TYPE_FAIL, str ? str : "");
|
||||
return false;
|
||||
}
|
||||
|
||||
// Per the asm.js standard convention, whether failure sets a pending
|
||||
// exception determines whether to attempt non-asm.js reparsing, so ignore
|
||||
// the return value below.
|
||||
Unused << parser.warningNoOffset(JSMSG_USE_ASM_TYPE_FAIL, str ? str : "");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -8681,29 +8691,29 @@ static bool
|
|||
EstablishPreconditions(JSContext* cx, AsmJSParser& parser)
|
||||
{
|
||||
if (!HasCompilerSupport(cx))
|
||||
return Warn(parser, JSMSG_USE_ASM_TYPE_FAIL, "Disabled by lack of compiler support");
|
||||
return TypeFailureWarning(parser, "Disabled by lack of compiler support");
|
||||
|
||||
switch (parser.options().asmJSOption) {
|
||||
case AsmJSOption::Disabled:
|
||||
return Warn(parser, JSMSG_USE_ASM_TYPE_FAIL, "Disabled by 'asmjs' runtime option");
|
||||
return TypeFailureWarning(parser, "Disabled by 'asmjs' runtime option");
|
||||
case AsmJSOption::DisabledByDebugger:
|
||||
return Warn(parser, JSMSG_USE_ASM_TYPE_FAIL, "Disabled by debugger");
|
||||
return TypeFailureWarning(parser, "Disabled by debugger");
|
||||
case AsmJSOption::Enabled:
|
||||
break;
|
||||
}
|
||||
|
||||
if (parser.pc->isGenerator())
|
||||
return Warn(parser, JSMSG_USE_ASM_TYPE_FAIL, "Disabled by generator context");
|
||||
return TypeFailureWarning(parser, "Disabled by generator context");
|
||||
|
||||
if (parser.pc->isAsync())
|
||||
return Warn(parser, JSMSG_USE_ASM_TYPE_FAIL, "Disabled by async context");
|
||||
return TypeFailureWarning(parser, "Disabled by async context");
|
||||
|
||||
if (parser.pc->isArrowFunction())
|
||||
return Warn(parser, JSMSG_USE_ASM_TYPE_FAIL, "Disabled by arrow function context");
|
||||
return TypeFailureWarning(parser, "Disabled by arrow function context");
|
||||
|
||||
// Class constructors are also methods
|
||||
if (parser.pc->isMethod() || parser.pc->isGetterOrSetter())
|
||||
return Warn(parser, JSMSG_USE_ASM_TYPE_FAIL, "Disabled by class constructor or method context");
|
||||
return TypeFailureWarning(parser, "Disabled by class constructor or method context");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -8817,7 +8827,7 @@ js::CompileAsmJS(JSContext* cx, AsmJSParser& parser, ParseNode* stmtList, bool*
|
|||
|
||||
// Success! Write to the console with a "warning" message.
|
||||
*validated = true;
|
||||
Warn(parser, JSMSG_USE_ASM_TYPE_OK, message.get());
|
||||
SuccessfulValidation(parser, Move(message));
|
||||
return NoExceptionPending(cx);
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче