Chromium Code Reviews| 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 526aba0307993c22dec1673124e81af36328c5b3..ff3035d4c558618370fb7fdec6ce218a06fd1a21 100644 |
| --- a/src/compiler-dispatcher/compiler-dispatcher-job.cc |
| +++ b/src/compiler-dispatcher/compiler-dispatcher-job.cc |
| @@ -67,6 +67,7 @@ void CompilerDispatcherJob::PrepareToParseOnMainThread() { |
| } |
| parse_info_.reset(new ParseInfo(zone_.get())); |
| parse_info_->set_isolate(isolate_); |
| + parse_info_->set_shared_info(shared); |
| parse_info_->set_character_stream(character_stream_.get()); |
| parse_info_->set_lazy(); |
| parse_info_->set_hash_seed(isolate_->heap()->HashSeed()); |
| @@ -134,9 +135,64 @@ void CompilerDispatcherJob::FinalizeParsingOnMainThread() { |
| InternalizeParsingResult(); |
| + status_ = CompileJobStatus::kReadyToAnalyse; |
| +} |
| + |
| +void CompilerDispatcherJob::PrepareToCompileOnMainThread() { |
| + DCHECK(ThreadId::Current().Equals(isolate_->thread_id())); |
| + DCHECK(status() == CompileJobStatus::kReadyToAnalyse); |
| + |
| + compile_info_.reset(new CompilationInfo(parse_info_.get(), function_)); |
| + |
| + // Create a canonical handle scope before ast numbering if compiling bytecode. |
| + // This is required for off-thread bytecode generation. |
| + std::unique_ptr<CanonicalHandleScope> canonical; |
| + if (FLAG_ignition) canonical.reset(new CanonicalHandleScope(isolate_)); |
| + |
| + if (!Compiler::Analyze(parse_info_.get())) { |
| + status_ = CompileJobStatus::kFailed; |
| + return; |
| + } |
| + compile_job_.reset( |
| + Compiler::PrepareUnoptimizedCompilationJob(compile_info_.get())); |
| + if (!compile_job_.get()) { |
| + status_ = CompileJobStatus::kFailed; |
| + return; |
| + } |
| + |
| status_ = CompileJobStatus::kReadyToCompile; |
| } |
| +void CompilerDispatcherJob::Compile() { |
| + DCHECK(status() == CompileJobStatus::kReadyToCompile); |
| + DisallowHeapAllocation no_allocation; |
| + DisallowHandleAllocation no_handles; |
| + DisallowHandleDereference no_deref; |
| + |
| + uintptr_t stack_limit = |
| + reinterpret_cast<uintptr_t>(&stack_limit) - max_stack_size_ * KB; |
| + compile_job_->set_stack_limit(stack_limit); |
| + |
| + if (compile_job_->ExecuteJob() != CompilationJob::SUCCEEDED) { |
| + status_ = CompileJobStatus::kFailed; |
| + return; |
| + } |
| + |
| + status_ = CompileJobStatus::kCompiled; |
| +} |
| + |
| +void CompilerDispatcherJob::FinalizeCompilingOnMainThread() { |
| + DCHECK(ThreadId::Current().Equals(isolate_->thread_id())); |
| + DCHECK(status() == CompileJobStatus::kCompiled); |
| + |
| + if (!Compiler::FinalizeCompilationJob(compile_job_.release())) { |
| + status_ = CompileJobStatus::kFailed; |
| + return; |
| + } |
| + |
| + status_ = CompileJobStatus::kDone; |
| +} |
| + |
| void CompilerDispatcherJob::ReportErrorsOnMainThread() { |
| DCHECK(ThreadId::Current().Equals(isolate_->thread_id())); |
| DCHECK(status() == CompileJobStatus::kFailed); |
| @@ -154,6 +210,7 @@ void CompilerDispatcherJob::ResetOnMainThread() { |
| unicode_cache_.reset(); |
| character_stream_.reset(); |
| parse_info_.reset(); |
| + compile_info_.reset(); |
| zone_.reset(); |
| if (!source_.is_null()) { |
| @@ -169,8 +226,6 @@ void CompilerDispatcherJob::InternalizeParsingResult() { |
| DCHECK(status() == CompileJobStatus::kParsed || |
| status() == CompileJobStatus::kFailed); |
| - HandleScope scope(isolate_); |
|
rmcilroy
2016/08/22 13:27:08
I've removed this HandleScope because the handles
|
| - |
| // 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; |