| 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
|
|
|