Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(834)

Unified Diff: src/parser.cc

Issue 960543002: Move compilation error handling into a separate class. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/parser.h ('k') | src/pending-compilation-error-handler.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/parser.cc
diff --git a/src/parser.cc b/src/parser.cc
index e50a5efdcbde94f5bd4a49c2e4108cb31192a2eb..32f73cf4f75bca9c810ccda4c2ac457da4958fea 100644
--- a/src/parser.cc
+++ b/src/parser.cc
@@ -608,12 +608,9 @@ void ParserTraits::ReportMessageAt(Scanner::Location source_location,
// and we want to report the stack overflow later.
return;
}
- parser_->has_pending_error_ = true;
- parser_->pending_error_location_ = source_location;
- parser_->pending_error_message_ = message;
- parser_->pending_error_char_arg_ = arg;
- parser_->pending_error_arg_ = NULL;
- parser_->pending_error_type_ = error_type;
+ parser_->pending_error_handler_.ReportMessageAt(source_location.beg_pos,
+ source_location.end_pos,
+ message, arg, error_type);
}
@@ -640,12 +637,9 @@ void ParserTraits::ReportMessageAt(Scanner::Location source_location,
// and we want to report the stack overflow later.
return;
}
- parser_->has_pending_error_ = true;
- parser_->pending_error_location_ = source_location;
- parser_->pending_error_message_ = message;
- parser_->pending_error_char_arg_ = NULL;
- parser_->pending_error_arg_ = arg;
- parser_->pending_error_type_ = error_type;
+ parser_->pending_error_handler_.ReportMessageAt(source_location.beg_pos,
+ source_location.end_pos,
+ message, arg, error_type);
}
@@ -789,11 +783,6 @@ Parser::Parser(CompilationInfo* info, uintptr_t stack_limit, uint32_t hash_seed,
compile_options_(info->compile_options()),
cached_parse_data_(NULL),
parsing_lazy_arrow_parameters_(false),
- has_pending_error_(false),
- 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) {
@@ -4283,57 +4272,6 @@ void Parser::HandleSourceURLComments(Isolate* isolate, Handle<Script> script) {
}
-void Parser::ThrowPendingError(Isolate* isolate, Handle<Script> script) {
- DCHECK(ast_value_factory()->IsInternalized());
- if (has_pending_error_) {
- MessageLocation location(script, pending_error_location_.beg_pos,
- pending_error_location_.end_pos);
- Factory* factory = isolate->factory();
- bool has_arg =
- pending_error_arg_ != NULL || pending_error_char_arg_ != NULL;
- Handle<FixedArray> elements = factory->NewFixedArray(has_arg ? 1 : 0);
- if (pending_error_arg_ != NULL) {
- Handle<String> arg_string = pending_error_arg_->string();
- elements->set(0, *arg_string);
- } else if (pending_error_char_arg_ != NULL) {
- Handle<String> arg_string =
- factory->NewStringFromUtf8(CStrVector(pending_error_char_arg_))
- .ToHandleChecked();
- elements->set(0, *arg_string);
- }
- isolate->debug()->OnCompileError(script);
-
- Handle<JSArray> array = factory->NewJSArrayWithElements(elements);
- Handle<Object> error;
- switch (pending_error_type_) {
- case kReferenceError:
- error = factory->NewReferenceError(pending_error_message_, array);
- break;
- case kSyntaxError:
- error = factory->NewSyntaxError(pending_error_message_, array);
- break;
- }
-
- Handle<JSObject> jserror = Handle<JSObject>::cast(error);
-
- Handle<Name> key_start_pos = factory->error_start_pos_symbol();
- JSObject::SetProperty(jserror, key_start_pos,
- handle(Smi::FromInt(location.start_pos()), isolate),
- SLOPPY).Check();
-
- Handle<Name> key_end_pos = factory->error_end_pos_symbol();
- JSObject::SetProperty(jserror, key_end_pos,
- handle(Smi::FromInt(location.end_pos()), isolate),
- SLOPPY).Check();
-
- Handle<Name> key_script = factory->error_script_symbol();
- JSObject::SetProperty(jserror, key_script, script, SLOPPY).Check();
-
- isolate->Throw(*error, &location);
- }
-}
-
-
void Parser::Internalize(Isolate* isolate, Handle<Script> script, bool error) {
// Internalize strings.
ast_value_factory()->Internalize(isolate);
@@ -4343,7 +4281,8 @@ void Parser::Internalize(Isolate* isolate, Handle<Script> script, bool error) {
if (stack_overflow()) {
isolate->StackOverflow();
} else {
- ThrowPendingError(isolate, script);
+ DCHECK(pending_error_handler_.has_pending_error());
+ pending_error_handler_.ThrowPendingError(isolate, script);
}
}
« no previous file with comments | « src/parser.h ('k') | src/pending-compilation-error-handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698