mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-21 01:05:45 +00:00
Bug 1283710 - Part 6: Make CompileError subclass of JSErrorReport. r=jwalden
This commit is contained in:
parent
6f9d4ca127
commit
331fcf2d25
@ -567,8 +567,8 @@ TokenStream::reportStrictModeErrorNumberVA(uint32_t offset, bool strictMode, uns
|
||||
void
|
||||
CompileError::throwError(JSContext* cx)
|
||||
{
|
||||
if (JSREPORT_IS_WARNING(report.flags)) {
|
||||
CallWarningReporter(cx, &report);
|
||||
if (JSREPORT_IS_WARNING(flags)) {
|
||||
CallWarningReporter(cx, this);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -583,11 +583,7 @@ CompileError::throwError(JSContext* cx)
|
||||
// as the non-top-level "load", "eval", or "compile" native function
|
||||
// returns false, the top-level reporter will eventually receive the
|
||||
// uncaught exception report.
|
||||
ErrorToException(cx, &report, nullptr, nullptr);
|
||||
}
|
||||
|
||||
CompileError::~CompileError()
|
||||
{
|
||||
ErrorToException(cx, this, nullptr, nullptr);
|
||||
}
|
||||
|
||||
bool
|
||||
@ -609,33 +605,33 @@ TokenStream::reportCompileErrorNumberVA(uint32_t offset, unsigned flags, unsigne
|
||||
return false;
|
||||
CompileError& err = *tempErrPtr;
|
||||
|
||||
err.report.flags = flags;
|
||||
err.report.errorNumber = errorNumber;
|
||||
err.report.filename = filename;
|
||||
err.report.isMuted = mutedErrors;
|
||||
err.flags = flags;
|
||||
err.errorNumber = errorNumber;
|
||||
err.filename = filename;
|
||||
err.isMuted = mutedErrors;
|
||||
if (offset == NoOffset) {
|
||||
err.report.lineno = 0;
|
||||
err.report.column = 0;
|
||||
err.lineno = 0;
|
||||
err.column = 0;
|
||||
} else {
|
||||
err.report.lineno = srcCoords.lineNum(offset);
|
||||
err.report.column = srcCoords.columnIndex(offset);
|
||||
err.lineno = srcCoords.lineNum(offset);
|
||||
err.column = srcCoords.columnIndex(offset);
|
||||
}
|
||||
|
||||
// If we have no location information, try to get one from the caller.
|
||||
bool callerFilename = false;
|
||||
if (offset != NoOffset && !err.report.filename && cx->isJSContext()) {
|
||||
if (offset != NoOffset && !err.filename && cx->isJSContext()) {
|
||||
NonBuiltinFrameIter iter(cx->asJSContext(),
|
||||
FrameIter::FOLLOW_DEBUGGER_EVAL_PREV_LINK,
|
||||
cx->compartment()->principals());
|
||||
if (!iter.done() && iter.filename()) {
|
||||
callerFilename = true;
|
||||
err.report.filename = iter.filename();
|
||||
err.report.lineno = iter.computeLine(&err.report.column);
|
||||
err.filename = iter.filename();
|
||||
err.lineno = iter.computeLine(&err.column);
|
||||
}
|
||||
}
|
||||
|
||||
if (!ExpandErrorArgumentsVA(cx, GetErrorMessage, nullptr, errorNumber,
|
||||
nullptr, ArgumentsAreLatin1, &err.report, args))
|
||||
nullptr, ArgumentsAreLatin1, &err, args))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@ -648,7 +644,7 @@ TokenStream::reportCompileErrorNumberVA(uint32_t offset, unsigned flags, unsigne
|
||||
// So we don't even try, leaving report.linebuf and friends zeroed. This
|
||||
// means that any error involving a multi-line token (e.g. an unterminated
|
||||
// multi-line string literal) won't have a context printed.
|
||||
if (offset != NoOffset && err.report.lineno == lineno && !callerFilename) {
|
||||
if (offset != NoOffset && err.lineno == lineno && !callerFilename) {
|
||||
// We show only a portion (a "window") of the line around the erroneous
|
||||
// token -- the first char in the token, plus |windowRadius| chars
|
||||
// before it and |windowRadius - 1| chars after it. This is because
|
||||
@ -686,7 +682,7 @@ TokenStream::reportCompileErrorNumberVA(uint32_t offset, unsigned flags, unsigne
|
||||
if (!linebuf)
|
||||
return false;
|
||||
|
||||
err.report.initOwnedLinebuf(linebuf.release(), windowLength, offset - windowStart);
|
||||
err.initOwnedLinebuf(linebuf.release(), windowLength, offset - windowStart);
|
||||
}
|
||||
|
||||
if (cx->isJSContext())
|
||||
|
@ -237,17 +237,9 @@ struct Token
|
||||
}
|
||||
};
|
||||
|
||||
struct CompileError {
|
||||
JSErrorReport report;
|
||||
CompileError() {}
|
||||
~CompileError();
|
||||
class CompileError : public JSErrorReport {
|
||||
public:
|
||||
void throwError(JSContext* cx);
|
||||
|
||||
private:
|
||||
// CompileError owns raw allocated memory, so disable assignment and copying
|
||||
// for safety.
|
||||
void operator=(const CompileError&) = delete;
|
||||
CompileError(const CompileError&) = delete;
|
||||
};
|
||||
|
||||
// Ideally, tokenizing would be entirely independent of context. But the
|
||||
|
@ -67,7 +67,7 @@ TraceCycleDetectionSet(JSTracer* trc, AutoCycleDetector::Set& set);
|
||||
|
||||
struct AutoResolving;
|
||||
|
||||
namespace frontend { struct CompileError; }
|
||||
namespace frontend { class CompileError; }
|
||||
|
||||
/*
|
||||
* Execution Context Overview:
|
||||
|
Loading…
Reference in New Issue
Block a user