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

Unified Diff: src/compiler-dispatcher/compiler-dispatcher-job.cc

Issue 2268983002: Finalizing parsing in a compile job should immediately report errors (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 4 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
Index: src/compiler-dispatcher/compiler-dispatcher-job.cc
diff --git a/src/compiler-dispatcher/compiler-dispatcher-job.cc b/src/compiler-dispatcher/compiler-dispatcher-job.cc
index 8134e4fec0b975f232505d015a67b329c361f0b7..923793665aa3cd503ab554ada9fcf67f00b4e662 100644
--- a/src/compiler-dispatcher/compiler-dispatcher-job.cc
+++ b/src/compiler-dispatcher/compiler-dispatcher-job.cc
@@ -119,7 +119,7 @@ void CompilerDispatcherJob::Parse() {
status_ = CompileJobStatus::kParsed;
}
-void CompilerDispatcherJob::FinalizeParsingOnMainThread() {
+bool CompilerDispatcherJob::FinalizeParsingOnMainThread() {
DCHECK(ThreadId::Current().Equals(isolate_->thread_id()));
DCHECK(status() == CompileJobStatus::kParsed);
@@ -130,22 +130,37 @@ void CompilerDispatcherJob::FinalizeParsingOnMainThread() {
if (parse_info_->literal() == nullptr) {
status_ = CompileJobStatus::kFailed;
- return;
+ } else {
+ status_ = CompileJobStatus::kReadyToCompile;
}
- InternalizeParsingResult();
-
- status_ = CompileJobStatus::kReadyToCompile;
-}
-
-void CompilerDispatcherJob::ReportErrorsOnMainThread() {
- DCHECK(ThreadId::Current().Equals(isolate_->thread_id()));
- DCHECK(status() == CompileJobStatus::kFailed);
-
- // Internalizing the parsing result will throw the error.
- InternalizeParsingResult();
+ DeferredHandleScope scope(isolate_);
+ {
+ // Create a canonical handle scope before internalizing parsed values if
+ // compiling bytecode. This is required for off-thread bytecode generation.
+ std::unique_ptr<CanonicalHandleScope> canonical;
+ if (FLAG_ignition) canonical.reset(new CanonicalHandleScope(isolate_));
+
+ Handle<SharedFunctionInfo> shared(function_->shared(), isolate_);
+ Handle<Script> script(Script::cast(shared->script()), isolate_);
+
+ parse_info_->set_script(script);
+ parse_info_->set_context(handle(function_->context(), isolate_));
+
+ // Do the parsing tasks which need to be done on the main thread. This will
+ // also handle parse errors.
+ parser_->Internalize(isolate_, script, parse_info_->literal() == nullptr);
+ parser_->HandleSourceURLComments(isolate_, script);
+
+ parse_info_->set_character_stream(nullptr);
+ parse_info_->set_unicode_cache(nullptr);
+ parser_.reset();
+ unicode_cache_.reset();
+ character_stream_.reset();
+ }
+ handles_from_parsing_.reset(scope.Detach());
- status_ = CompileJobStatus::kDone;
+ return status_ != CompileJobStatus::kFailed;
}
void CompilerDispatcherJob::ResetOnMainThread() {
@@ -156,6 +171,7 @@ void CompilerDispatcherJob::ResetOnMainThread() {
character_stream_.reset();
parse_info_.reset();
zone_.reset();
+ handles_from_parsing_.reset();
if (!source_.is_null()) {
i::GlobalHandles::Destroy(Handle<Object>::cast(source_).location());
@@ -165,35 +181,5 @@ void CompilerDispatcherJob::ResetOnMainThread() {
status_ = CompileJobStatus::kInitial;
}
-void CompilerDispatcherJob::InternalizeParsingResult() {
- DCHECK(ThreadId::Current().Equals(isolate_->thread_id()));
- DCHECK(status() == CompileJobStatus::kParsed ||
- status() == CompileJobStatus::kFailed);
-
- HandleScope scope(isolate_);
-
- // Create a canonical handle scope before internalizing parsed values if
- // compiling bytecode. This is required for off-thread bytecode generation.
- std::unique_ptr<CanonicalHandleScope> canonical;
- if (FLAG_ignition) canonical.reset(new CanonicalHandleScope(isolate_));
-
- Handle<SharedFunctionInfo> shared(function_->shared(), isolate_);
- Handle<Script> script(Script::cast(shared->script()), isolate_);
-
- parse_info_->set_script(script);
- parse_info_->set_context(handle(function_->context(), isolate_));
-
- // Do the parsing tasks which need to be done on the main thread. This will
- // also handle parse errors.
- parser_->Internalize(isolate_, script, parse_info_->literal() == nullptr);
- parser_->HandleSourceURLComments(isolate_, script);
-
- parse_info_->set_character_stream(nullptr);
- parse_info_->set_unicode_cache(nullptr);
- parser_.reset();
- unicode_cache_.reset();
- character_stream_.reset();
-}
-
} // namespace internal
} // namespace v8

Powered by Google App Engine
This is Rietveld 408576698