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 793b02d2614817de99a5784448b8d4ca102e0827..986a822093ff4fa2dcb81da13ec13f9915a158b5 100644 |
--- a/src/compiler-dispatcher/compiler-dispatcher-job.cc |
+++ b/src/compiler-dispatcher/compiler-dispatcher-job.cc |
@@ -84,26 +84,27 @@ CompilerDispatcherJob::CompilerDispatcherJob(Isolate* isolate, |
} |
} |
-CompilerDispatcherJob::CompilerDispatcherJob(Isolate* isolate, |
- CompilerDispatcherTracer* tracer, |
- Handle<SharedFunctionInfo> shared, |
- FunctionLiteral* literal, |
- size_t max_stack_size) |
+CompilerDispatcherJob::CompilerDispatcherJob( |
+ Isolate* isolate, CompilerDispatcherTracer* tracer, |
+ Handle<SharedFunctionInfo> shared, FunctionLiteral* literal, |
+ std::shared_ptr<Zone> parse_zone, |
+ std::shared_ptr<DeferredHandles> parse_handles, |
+ std::shared_ptr<DeferredHandles> compile_handles, size_t max_stack_size) |
: status_(CompileJobStatus::kAnalyzed), |
isolate_(isolate), |
tracer_(tracer), |
shared_(Handle<SharedFunctionInfo>::cast( |
isolate_->global_handles()->Create(*shared))), |
max_stack_size_(max_stack_size), |
- parse_info_( |
- new ParseInfo(Handle<Script>(Script::cast(shared->script())))), |
+ parse_info_(new ParseInfo(shared_)), |
+ parse_zone_(parse_zone), |
compile_info_(new CompilationInfo(parse_info_->zone(), parse_info_.get(), |
Handle<JSFunction>::null())), |
trace_compiler_dispatcher_jobs_(FLAG_trace_compiler_dispatcher_jobs) { |
parse_info_->set_literal(literal); |
- parse_info_->set_shared_info(shared); |
- parse_info_->set_function_literal_id(shared->function_literal_id()); |
- parse_info_->set_language_mode(literal->scope()->language_mode()); |
+ parse_info_->set_deferred_handles(parse_handles); |
+ compile_info_->set_deferred_handles(compile_handles); |
+ |
if (trace_compiler_dispatcher_jobs_) { |
PrintF("CompilerDispatcherJob[%p] created for ", static_cast<void*>(this)); |
shared_->ShortPrint(); |
@@ -276,17 +277,19 @@ bool CompilerDispatcherJob::FinalizeParsingOnMainThread() { |
wrapper_ = Handle<String>::null(); |
} |
+ Handle<Script> script(Script::cast(shared_->script()), isolate_); |
+ parse_info_->set_script(script); |
if (parse_info_->literal() == nullptr) { |
+ parser_->ReportErrors(isolate_, script); |
status_ = CompileJobStatus::kFailed; |
} else { |
status_ = CompileJobStatus::kReadyToAnalyze; |
} |
+ parser_->UpdateStatistics(isolate_, script); |
DeferredHandleScope scope(isolate_); |
{ |
- Handle<Script> script(Script::cast(shared_->script()), isolate_); |
- |
- parse_info_->set_script(script); |
+ parse_info_->ReopenHandlesInNewHandleScope(); |
Handle<ScopeInfo> outer_scope_info( |
handle(ScopeInfo::cast(shared_->outer_scope_info()))); |
if (outer_scope_info->length() > 0) { |
@@ -294,9 +297,8 @@ bool CompilerDispatcherJob::FinalizeParsingOnMainThread() { |
} |
parse_info_->set_shared_info(shared_); |
- // 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); |
+ // Internalize ast values on the main thread. |
+ parse_info_->ast_value_factory()->Internalize(isolate_); |
parser_->HandleSourceURLComments(isolate_, script); |
parse_info_->set_character_stream(nullptr); |
@@ -305,7 +307,7 @@ bool CompilerDispatcherJob::FinalizeParsingOnMainThread() { |
unicode_cache_.reset(); |
character_stream_.reset(); |
} |
- handles_from_parsing_.reset(scope.Detach()); |
+ parse_info_->set_deferred_handles(scope.Detach()); |
return status_ != CompileJobStatus::kFailed; |
} |
@@ -393,7 +395,7 @@ bool CompilerDispatcherJob::FinalizeCompilingOnMainThread() { |
compile_job_.reset(); |
compile_info_.reset(); |
- handles_from_parsing_.reset(); |
+ parse_zone_.reset(); |
parse_info_.reset(); |
status_ = CompileJobStatus::kDone; |
@@ -409,10 +411,10 @@ void CompilerDispatcherJob::ResetOnMainThread() { |
compile_job_.reset(); |
compile_info_.reset(); |
+ parse_zone_.reset(); |
parser_.reset(); |
unicode_cache_.reset(); |
character_stream_.reset(); |
- handles_from_parsing_.reset(); |
parse_info_.reset(); |
if (!source_.is_null()) { |