Bug 1424394 - Split Parser::reportNoOffset into Parser::{error,warning}NoOffset. r=arai

--HG--
extra : rebase_source : b0a9a905cb236a29dea8fd8420d935f8e1257c2a
This commit is contained in:
Jeff Walden 2017-04-17 15:05:39 -07:00
Родитель 7941d1eed0
Коммит cb0c7b62e2
5 изменённых файлов: 50 добавлений и 47 удалений

Просмотреть файл

@ -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);
}