Index: src/parser.cc |
diff --git a/src/parser.cc b/src/parser.cc |
index 336afa9a9fc5aaa95cb2d814f3ccf8c6935486cf..c27d1bed7b453786092b36bbaaf02e76095bddfc 100644 |
--- a/src/parser.cc |
+++ b/src/parser.cc |
@@ -600,9 +600,8 @@ Expression* ParserTraits::NewThrowError( |
void ParserTraits::ReportMessageAt(Scanner::Location source_location, |
- const char* message, |
- const char* arg, |
- bool is_reference_error) { |
+ const char* message, const char* arg, |
+ ParseErrorType error_type) { |
if (parser_->stack_overflow()) { |
// Suppress the error message (syntax error or such) in the presence of a |
// stack overflow. The isolate allows only one pending exception at at time |
@@ -614,30 +613,27 @@ void ParserTraits::ReportMessageAt(Scanner::Location source_location, |
parser_->pending_error_message_ = message; |
parser_->pending_error_char_arg_ = arg; |
parser_->pending_error_arg_ = NULL; |
- parser_->pending_error_is_reference_error_ = is_reference_error; |
+ parser_->pending_error_type_ = error_type; |
} |
-void ParserTraits::ReportMessage(const char* message, |
- const char* arg, |
- bool is_reference_error) { |
+void ParserTraits::ReportMessage(const char* message, const char* arg, |
+ ParseErrorType error_type) { |
Scanner::Location source_location = parser_->scanner()->location(); |
- ReportMessageAt(source_location, message, arg, is_reference_error); |
+ ReportMessageAt(source_location, message, arg, error_type); |
} |
-void ParserTraits::ReportMessage(const char* message, |
- const AstRawString* arg, |
- bool is_reference_error) { |
+void ParserTraits::ReportMessage(const char* message, const AstRawString* arg, |
+ ParseErrorType error_type) { |
Scanner::Location source_location = parser_->scanner()->location(); |
- ReportMessageAt(source_location, message, arg, is_reference_error); |
+ ReportMessageAt(source_location, message, arg, error_type); |
} |
void ParserTraits::ReportMessageAt(Scanner::Location source_location, |
- const char* message, |
- const AstRawString* arg, |
- bool is_reference_error) { |
+ const char* message, const AstRawString* arg, |
+ ParseErrorType error_type) { |
if (parser_->stack_overflow()) { |
// Suppress the error message (syntax error or such) in the presence of a |
// stack overflow. The isolate allows only one pending exception at at time |
@@ -649,7 +645,7 @@ void ParserTraits::ReportMessageAt(Scanner::Location source_location, |
parser_->pending_error_message_ = message; |
parser_->pending_error_char_arg_ = NULL; |
parser_->pending_error_arg_ = arg; |
- parser_->pending_error_is_reference_error_ = is_reference_error; |
+ parser_->pending_error_type_ = error_type; |
} |
@@ -797,6 +793,7 @@ Parser::Parser(CompilationInfo* info, uintptr_t stack_limit, uint32_t hash_seed, |
pending_error_message_(NULL), |
pending_error_arg_(NULL), |
pending_error_char_arg_(NULL), |
+ pending_error_type_(kSyntaxError), |
total_preparse_skipped_(0), |
pre_parse_timer_(NULL), |
parsing_on_main_thread_(true) { |
@@ -3889,7 +3886,7 @@ void Parser::SkipLazyFunctionBody(const AstRawString* function_name, |
if (logger.has_error()) { |
ParserTraits::ReportMessageAt( |
Scanner::Location(logger.start(), logger.end()), logger.message(), |
- logger.argument_opt(), logger.is_reference_error()); |
+ logger.argument_opt(), logger.error_type()); |
*ok = false; |
return; |
} |
@@ -4294,10 +4291,16 @@ void Parser::ThrowPendingError(Isolate* isolate, Handle<Script> script) { |
Handle<JSArray> array = factory->NewJSArrayWithElements(elements); |
Handle<Object> error; |
- MaybeHandle<Object> maybe_error = |
- pending_error_is_reference_error_ |
- ? factory->NewReferenceError(pending_error_message_, array) |
- : factory->NewSyntaxError(pending_error_message_, array); |
+ MaybeHandle<Object> maybe_error; |
+ switch (pending_error_type_) { |
+ case kReferenceError: |
+ maybe_error = factory->NewReferenceError(pending_error_message_, array); |
+ break; |
+ case kSyntaxError: |
+ maybe_error = factory->NewSyntaxError(pending_error_message_, array); |
+ break; |
+ } |
+ DCHECK(!maybe_error.is_null() || isolate->has_pending_exception()); |
if (maybe_error.ToHandle(&error)) { |
Handle<JSObject> jserror = Handle<JSObject>::cast(error); |