Commit 395dfc07 authored by hablich's avatar hablich Committed by Commit bot

Reland of land: [Parse] ParseInfo owns the parsing Zone. (patchset #1 id:1 of...

Reland of land: [Parse] ParseInfo owns the parsing Zone. (patchset #1 id:1 of https://codereview.chromium.org/2683733002/ )

Reason for revert:
False alarm, bot hiccup

Original issue's description:
> Revert of Reland: [Parse] ParseInfo owns the parsing Zone. (patchset #7 id:140001 of https://codereview.chromium.org/2632123006/ )
>
> Reason for revert:
> Speculative revert because of revert needed for https://codereview.chromium.org/2632123006
>
> Original issue's description:
> > Reland: [Parse] ParseInfo owns the parsing Zone.
> >
> > Moves ownership of the parsing Zone to ParseInfo with a shared_ptr. This is
> > in preperation for enabling background compilation jobs for inner functions
> > share the AST in the outer-function's parse zone memory (read-only), with the
> > and zone being released when all compilation jobs have completed.
> >
> > BUG=v8:5203,v8:5215
> >
> > Review-Url: https://codereview.chromium.org/2632123006
> > Cr-Original-Commit-Position: refs/heads/master@{#42993}
> > Committed: https://chromium.googlesource.com/v8/v8/+/14fb337200d5da09c77438ddd40bea935b1dc823
> > Review-Url: https://codereview.chromium.org/2632123006
> > Cr-Commit-Position: refs/heads/master@{#42996}
> > Committed: https://chromium.googlesource.com/v8/v8/+/9e7d5a6065470ca03411d4c8dbc61d1be5c3f84a
>
> TBR=marja@chromium.org,mstarzinger@chromium.org,ahaas@chromium.org,verwaest@chromium.org,rmcilroy@chromium.org
> # Skipping CQ checks because original CL landed less than 1 days ago.
> NOPRESUBMIT=true
> NOTREECHECKS=true
> NOTRY=true
> BUG=v8:5203,v8:5215
>
> Review-Url: https://codereview.chromium.org/2683733002
> Cr-Commit-Position: refs/heads/master@{#43008}
> Committed: https://chromium.googlesource.com/v8/v8/+/9fe08ec067051c5b46e694568bd01c6dba44cc4d

TBR=marja@chromium.org,mstarzinger@chromium.org,ahaas@chromium.org,verwaest@chromium.org,rmcilroy@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=v8:5203,v8:5215

Review-Url: https://codereview.chromium.org/2679303003
Cr-Commit-Position: refs/heads/master@{#43015}
parent 0e129692
...@@ -142,27 +142,27 @@ class AsmWasmBuilderImpl final : public AstVisitor<AsmWasmBuilderImpl> { ...@@ -142,27 +142,27 @@ class AsmWasmBuilderImpl final : public AstVisitor<AsmWasmBuilderImpl> {
DCHECK_EQ(kModuleScope, scope_); DCHECK_EQ(kModuleScope, scope_);
DCHECK_NULL(current_function_builder_); DCHECK_NULL(current_function_builder_);
FunctionLiteral* old_func = decl->fun(); FunctionLiteral* old_func = decl->fun();
Zone zone(isolate_->allocator(), ZONE_NAME);
DeclarationScope* new_func_scope = nullptr; DeclarationScope* new_func_scope = nullptr;
std::unique_ptr<ParseInfo> info;
if (decl->fun()->body() == nullptr) { if (decl->fun()->body() == nullptr) {
// TODO(titzer/bradnelson): Reuse SharedFunctionInfos used here when // TODO(titzer/bradnelson): Reuse SharedFunctionInfos used here when
// compiling the wasm module. // compiling the wasm module.
Handle<SharedFunctionInfo> shared = Handle<SharedFunctionInfo> shared =
Compiler::GetSharedFunctionInfo(decl->fun(), script_, info_); Compiler::GetSharedFunctionInfo(decl->fun(), script_, info_);
shared->set_is_toplevel(false); shared->set_is_toplevel(false);
ParseInfo info(&zone, script_); info.reset(new ParseInfo(script_));
info.set_shared_info(shared); info->set_shared_info(shared);
info.set_toplevel(false); info->set_toplevel(false);
info.set_language_mode(decl->fun()->scope()->language_mode()); info->set_language_mode(decl->fun()->scope()->language_mode());
info.set_allow_lazy_parsing(false); info->set_allow_lazy_parsing(false);
info.set_function_literal_id(shared->function_literal_id()); info->set_function_literal_id(shared->function_literal_id());
info.set_ast_value_factory(ast_value_factory_); info->set_ast_value_factory(ast_value_factory_);
info.set_ast_value_factory_owned(false); info->set_ast_value_factory_owned(false);
// Create fresh function scope to use to parse the function in. // Create fresh function scope to use to parse the function in.
new_func_scope = new (info.zone()) DeclarationScope( new_func_scope = new (info->zone()) DeclarationScope(
info.zone(), decl->fun()->scope()->outer_scope(), FUNCTION_SCOPE); info->zone(), decl->fun()->scope()->outer_scope(), FUNCTION_SCOPE);
info.set_asm_function_scope(new_func_scope); info->set_asm_function_scope(new_func_scope);
if (!Compiler::ParseAndAnalyze(&info)) { if (!Compiler::ParseAndAnalyze(info.get())) {
decl->fun()->scope()->outer_scope()->RemoveInnerScope(new_func_scope); decl->fun()->scope()->outer_scope()->RemoveInnerScope(new_func_scope);
if (isolate_->has_pending_exception()) { if (isolate_->has_pending_exception()) {
isolate_->clear_pending_exception(); isolate_->clear_pending_exception();
...@@ -171,7 +171,7 @@ class AsmWasmBuilderImpl final : public AstVisitor<AsmWasmBuilderImpl> { ...@@ -171,7 +171,7 @@ class AsmWasmBuilderImpl final : public AstVisitor<AsmWasmBuilderImpl> {
typer_failed_ = true; typer_failed_ = true;
return; return;
} }
FunctionLiteral* func = info.literal(); FunctionLiteral* func = info->literal();
DCHECK_NOT_NULL(func); DCHECK_NOT_NULL(func);
decl->set_fun(func); decl->set_fun(func);
} }
......
...@@ -13,7 +13,6 @@ namespace internal { ...@@ -13,7 +13,6 @@ namespace internal {
void StreamedSource::Release() { void StreamedSource::Release() {
parser.reset(); parser.reset();
info.reset(); info.reset();
zone.reset();
} }
BackgroundParsingTask::BackgroundParsingTask( BackgroundParsingTask::BackgroundParsingTask(
...@@ -29,10 +28,8 @@ BackgroundParsingTask::BackgroundParsingTask( ...@@ -29,10 +28,8 @@ BackgroundParsingTask::BackgroundParsingTask(
// Prepare the data for the internalization phase and compilation phase, which // Prepare the data for the internalization phase and compilation phase, which
// will happen in the main thread after parsing. // will happen in the main thread after parsing.
Zone* zone = new Zone(isolate->allocator(), ZONE_NAME); ParseInfo* info = new ParseInfo(isolate->allocator());
ParseInfo* info = new ParseInfo(zone);
info->set_toplevel(); info->set_toplevel();
source->zone.reset(zone);
source->info.reset(info); source->info.reset(info);
info->set_isolate(isolate); info->set_isolate(isolate);
info->set_source_stream(source->source_stream.get()); info->set_source_stream(source->source_stream.get());
......
...@@ -38,7 +38,6 @@ struct StreamedSource { ...@@ -38,7 +38,6 @@ struct StreamedSource {
// between parsing and compilation. These need to be initialized before the // between parsing and compilation. These need to be initialized before the
// compilation starts. // compilation starts.
UnicodeCache unicode_cache; UnicodeCache unicode_cache;
std::unique_ptr<Zone> zone;
std::unique_ptr<ParseInfo> info; std::unique_ptr<ParseInfo> info;
std::unique_ptr<Parser> parser; std::unique_ptr<Parser> parser;
......
...@@ -95,9 +95,8 @@ CompilerDispatcherJob::CompilerDispatcherJob(Isolate* isolate, ...@@ -95,9 +95,8 @@ CompilerDispatcherJob::CompilerDispatcherJob(Isolate* isolate,
shared_(Handle<SharedFunctionInfo>::cast( shared_(Handle<SharedFunctionInfo>::cast(
isolate_->global_handles()->Create(*shared))), isolate_->global_handles()->Create(*shared))),
max_stack_size_(max_stack_size), max_stack_size_(max_stack_size),
zone_(new Zone(isolate->allocator(), ZONE_NAME)), parse_info_(
parse_info_(new ParseInfo( new ParseInfo(Handle<Script>(Script::cast(shared->script())))),
zone_.get(), Handle<Script>(Script::cast(shared->script())))),
compile_info_( compile_info_(
new CompilationInfo(parse_info_.get(), Handle<JSFunction>::null())), new CompilationInfo(parse_info_.get(), Handle<JSFunction>::null())),
trace_compiler_dispatcher_jobs_(FLAG_trace_compiler_dispatcher_jobs) { trace_compiler_dispatcher_jobs_(FLAG_trace_compiler_dispatcher_jobs) {
...@@ -134,11 +133,11 @@ void CompilerDispatcherJob::PrepareToParseOnMainThread() { ...@@ -134,11 +133,11 @@ void CompilerDispatcherJob::PrepareToParseOnMainThread() {
} }
HandleScope scope(isolate_); HandleScope scope(isolate_);
unicode_cache_.reset(new UnicodeCache()); unicode_cache_.reset(new UnicodeCache());
zone_.reset(new Zone(isolate_->allocator(), ZONE_NAME));
Handle<Script> script(Script::cast(shared_->script()), isolate_); Handle<Script> script(Script::cast(shared_->script()), isolate_);
DCHECK(script->type() != Script::TYPE_NATIVE); DCHECK(script->type() != Script::TYPE_NATIVE);
Handle<String> source(String::cast(script->source()), isolate_); Handle<String> source(String::cast(script->source()), isolate_);
parse_info_.reset(new ParseInfo(isolate_->allocator()));
if (source->IsExternalTwoByteString() || source->IsExternalOneByteString()) { if (source->IsExternalTwoByteString() || source->IsExternalOneByteString()) {
character_stream_.reset(ScannerStream::For( character_stream_.reset(ScannerStream::For(
source, shared_->start_position(), shared_->end_position())); source, shared_->start_position(), shared_->end_position()));
...@@ -169,7 +168,7 @@ void CompilerDispatcherJob::PrepareToParseOnMainThread() { ...@@ -169,7 +168,7 @@ void CompilerDispatcherJob::PrepareToParseOnMainThread() {
offset = shared_->start_position(); offset = shared_->start_position();
int byte_len = length * (source->IsOneByteRepresentation() ? 1 : 2); int byte_len = length * (source->IsOneByteRepresentation() ? 1 : 2);
data = zone_->New(byte_len); data = parse_info_->zone()->New(byte_len);
DisallowHeapAllocation no_allocation; DisallowHeapAllocation no_allocation;
String::FlatContent content = source->GetFlatContent(); String::FlatContent content = source->GetFlatContent();
...@@ -207,7 +206,6 @@ void CompilerDispatcherJob::PrepareToParseOnMainThread() { ...@@ -207,7 +206,6 @@ void CompilerDispatcherJob::PrepareToParseOnMainThread() {
ScannerStream::For(wrapper_, shared_->start_position() - offset, ScannerStream::For(wrapper_, shared_->start_position() - offset,
shared_->end_position() - offset)); shared_->end_position() - offset));
} }
parse_info_.reset(new ParseInfo(zone_.get()));
parse_info_->set_isolate(isolate_); parse_info_->set_isolate(isolate_);
parse_info_->set_character_stream(character_stream_.get()); parse_info_->set_character_stream(character_stream_.get());
parse_info_->set_hash_seed(isolate_->heap()->HashSeed()); parse_info_->set_hash_seed(isolate_->heap()->HashSeed());
...@@ -393,7 +391,6 @@ bool CompilerDispatcherJob::FinalizeCompilingOnMainThread() { ...@@ -393,7 +391,6 @@ bool CompilerDispatcherJob::FinalizeCompilingOnMainThread() {
return false; return false;
} }
zone_.reset();
compile_job_.reset(); compile_job_.reset();
compile_info_.reset(); compile_info_.reset();
handles_from_parsing_.reset(); handles_from_parsing_.reset();
...@@ -417,7 +414,6 @@ void CompilerDispatcherJob::ResetOnMainThread() { ...@@ -417,7 +414,6 @@ void CompilerDispatcherJob::ResetOnMainThread() {
character_stream_.reset(); character_stream_.reset();
handles_from_parsing_.reset(); handles_from_parsing_.reset();
parse_info_.reset(); parse_info_.reset();
zone_.reset();
if (!source_.is_null()) { if (!source_.is_null()) {
i::GlobalHandles::Destroy(Handle<Object>::cast(source_).location()); i::GlobalHandles::Destroy(Handle<Object>::cast(source_).location());
......
...@@ -109,7 +109,6 @@ class V8_EXPORT_PRIVATE CompilerDispatcherJob { ...@@ -109,7 +109,6 @@ class V8_EXPORT_PRIVATE CompilerDispatcherJob {
// Members required for parsing. // Members required for parsing.
std::unique_ptr<UnicodeCache> unicode_cache_; std::unique_ptr<UnicodeCache> unicode_cache_;
std::unique_ptr<Zone> zone_;
std::unique_ptr<Utf16CharacterStream> character_stream_; std::unique_ptr<Utf16CharacterStream> character_stream_;
std::unique_ptr<ParseInfo> parse_info_; std::unique_ptr<ParseInfo> parse_info_;
std::unique_ptr<Parser> parser_; std::unique_ptr<Parser> parser_;
......
...@@ -537,8 +537,7 @@ bool CompileUnoptimizedInnerFunctions( ...@@ -537,8 +537,7 @@ bool CompileUnoptimizedInnerFunctions(
continue; continue;
} else { } else {
// Otherwise generate unoptimized code now. // Otherwise generate unoptimized code now.
Zone zone(isolate->allocator(), ZONE_NAME); ParseInfo parse_info(script);
ParseInfo parse_info(&zone, script);
CompilationInfo info(&parse_info, Handle<JSFunction>::null()); CompilationInfo info(&parse_info, Handle<JSFunction>::null());
parse_info.set_literal(literal); parse_info.set_literal(literal);
...@@ -925,8 +924,7 @@ MaybeHandle<Code> GetBaselineCode(Handle<JSFunction> function) { ...@@ -925,8 +924,7 @@ MaybeHandle<Code> GetBaselineCode(Handle<JSFunction> function) {
Isolate* isolate = function->GetIsolate(); Isolate* isolate = function->GetIsolate();
VMState<COMPILER> state(isolate); VMState<COMPILER> state(isolate);
PostponeInterruptsScope postpone(isolate); PostponeInterruptsScope postpone(isolate);
Zone zone(isolate->allocator(), ZONE_NAME); ParseInfo parse_info(handle(function->shared()));
ParseInfo parse_info(&zone, handle(function->shared()));
CompilationInfo info(&parse_info, function); CompilationInfo info(&parse_info, function);
DCHECK(function->shared()->is_compiled()); DCHECK(function->shared()->is_compiled());
...@@ -1059,8 +1057,7 @@ MaybeHandle<Code> GetLazyCode(Handle<JSFunction> function) { ...@@ -1059,8 +1057,7 @@ MaybeHandle<Code> GetLazyCode(Handle<JSFunction> function) {
return entry; return entry;
} }
Zone zone(isolate->allocator(), ZONE_NAME); ParseInfo parse_info(handle(function->shared()));
ParseInfo parse_info(&zone, handle(function->shared()));
CompilationInfo info(&parse_info, function); CompilationInfo info(&parse_info, function);
Handle<Code> result; Handle<Code> result;
ASSIGN_RETURN_ON_EXCEPTION(isolate, result, GetUnoptimizedCode(&info), Code); ASSIGN_RETURN_ON_EXCEPTION(isolate, result, GetUnoptimizedCode(&info), Code);
...@@ -1241,8 +1238,7 @@ bool Compiler::CompileOptimized(Handle<JSFunction> function, ...@@ -1241,8 +1238,7 @@ bool Compiler::CompileOptimized(Handle<JSFunction> function,
code = isolate->builtins()->InterpreterEntryTrampoline(); code = isolate->builtins()->InterpreterEntryTrampoline();
function->shared()->ReplaceCode(*code); function->shared()->ReplaceCode(*code);
} else { } else {
Zone zone(isolate->allocator(), ZONE_NAME); ParseInfo parse_info(handle(function->shared()));
ParseInfo parse_info(&zone, handle(function->shared()));
CompilationInfo info(&parse_info, function); CompilationInfo info(&parse_info, function);
if (!GetUnoptimizedCode(&info).ToHandle(&code)) { if (!GetUnoptimizedCode(&info).ToHandle(&code)) {
return false; return false;
...@@ -1266,8 +1262,7 @@ bool Compiler::CompileDebugCode(Handle<SharedFunctionInfo> shared) { ...@@ -1266,8 +1262,7 @@ bool Compiler::CompileDebugCode(Handle<SharedFunctionInfo> shared) {
DCHECK(AllowCompilation::IsAllowed(isolate)); DCHECK(AllowCompilation::IsAllowed(isolate));
// Start a compilation. // Start a compilation.
Zone zone(isolate->allocator(), ZONE_NAME); ParseInfo parse_info(shared);
ParseInfo parse_info(&zone, shared);
CompilationInfo info(&parse_info, Handle<JSFunction>::null()); CompilationInfo info(&parse_info, Handle<JSFunction>::null());
info.MarkAsDebug(); info.MarkAsDebug();
if (GetUnoptimizedCode(&info).is_null()) { if (GetUnoptimizedCode(&info).is_null()) {
...@@ -1294,8 +1289,7 @@ MaybeHandle<JSArray> Compiler::CompileForLiveEdit(Handle<Script> script) { ...@@ -1294,8 +1289,7 @@ MaybeHandle<JSArray> Compiler::CompileForLiveEdit(Handle<Script> script) {
script->set_shared_function_infos(isolate->heap()->empty_fixed_array()); script->set_shared_function_infos(isolate->heap()->empty_fixed_array());
// Start a compilation. // Start a compilation.
Zone zone(isolate->allocator(), ZONE_NAME); ParseInfo parse_info(script);
ParseInfo parse_info(&zone, script);
CompilationInfo info(&parse_info, Handle<JSFunction>::null()); CompilationInfo info(&parse_info, Handle<JSFunction>::null());
info.MarkAsDebug(); info.MarkAsDebug();
...@@ -1306,7 +1300,7 @@ MaybeHandle<JSArray> Compiler::CompileForLiveEdit(Handle<Script> script) { ...@@ -1306,7 +1300,7 @@ MaybeHandle<JSArray> Compiler::CompileForLiveEdit(Handle<Script> script) {
// Check postconditions on success. // Check postconditions on success.
DCHECK(!isolate->has_pending_exception()); DCHECK(!isolate->has_pending_exception());
infos = LiveEditFunctionTracker::Collect(parse_info.literal(), script, infos = LiveEditFunctionTracker::Collect(parse_info.literal(), script,
&zone, isolate); parse_info.zone(), isolate);
} }
// Restore the original function info list in order to remain side-effect // Restore the original function info list in order to remain side-effect
...@@ -1436,8 +1430,7 @@ MaybeHandle<JSFunction> Compiler::GetFunctionFromEval( ...@@ -1436,8 +1430,7 @@ MaybeHandle<JSFunction> Compiler::GetFunctionFromEval(
script->set_compilation_type(Script::COMPILATION_TYPE_EVAL); script->set_compilation_type(Script::COMPILATION_TYPE_EVAL);
Script::SetEvalOrigin(script, outer_info, eval_position); Script::SetEvalOrigin(script, outer_info, eval_position);
Zone zone(isolate->allocator(), ZONE_NAME); ParseInfo parse_info(script);
ParseInfo parse_info(&zone, script);
CompilationInfo info(&parse_info, Handle<JSFunction>::null()); CompilationInfo info(&parse_info, Handle<JSFunction>::null());
parse_info.set_eval(); parse_info.set_eval();
parse_info.set_language_mode(language_mode); parse_info.set_language_mode(language_mode);
...@@ -1646,8 +1639,7 @@ Handle<SharedFunctionInfo> Compiler::GetSharedFunctionInfoForScript( ...@@ -1646,8 +1639,7 @@ Handle<SharedFunctionInfo> Compiler::GetSharedFunctionInfoForScript(
} }
// Compile the function and add it to the cache. // Compile the function and add it to the cache.
Zone zone(isolate->allocator(), ZONE_NAME); ParseInfo parse_info(script);
ParseInfo parse_info(&zone, script);
CompilationInfo info(&parse_info, Handle<JSFunction>::null()); CompilationInfo info(&parse_info, Handle<JSFunction>::null());
if (resource_options.IsModule()) parse_info.set_module(); if (resource_options.IsModule()) parse_info.set_module();
if (compile_options != ScriptCompiler::kNoCompileOptions) { if (compile_options != ScriptCompiler::kNoCompileOptions) {
......
...@@ -549,8 +549,7 @@ Reduction JSInliner::ReduceJSCall(Node* node) { ...@@ -549,8 +549,7 @@ Reduction JSInliner::ReduceJSCall(Node* node) {
} }
} }
Zone zone(info_->isolate()->allocator(), ZONE_NAME); ParseInfo parse_info(shared_info);
ParseInfo parse_info(&zone, shared_info);
CompilationInfo info(&parse_info, Handle<JSFunction>::null()); CompilationInfo info(&parse_info, Handle<JSFunction>::null());
if (info_->is_deoptimization_enabled()) info.MarkAsDeoptimizationEnabled(); if (info_->is_deoptimization_enabled()) info.MarkAsDeoptimizationEnabled();
info.MarkAsOptimizeFromBytecode(); info.MarkAsOptimizeFromBytecode();
...@@ -591,8 +590,8 @@ Reduction JSInliner::ReduceJSCall(Node* node) { ...@@ -591,8 +590,8 @@ Reduction JSInliner::ReduceJSCall(Node* node) {
// Run the BytecodeGraphBuilder to create the subgraph. // Run the BytecodeGraphBuilder to create the subgraph.
Graph::SubgraphScope scope(graph()); Graph::SubgraphScope scope(graph());
BytecodeGraphBuilder graph_builder( BytecodeGraphBuilder graph_builder(
&zone, shared_info, feedback_vector, BailoutId::None(), jsgraph(), parse_info.zone(), shared_info, feedback_vector, BailoutId::None(),
call.frequency(), source_positions_, inlining_id); jsgraph(), call.frequency(), source_positions_, inlining_id);
graph_builder.CreateGraph(false); graph_builder.CreateGraph(false);
// Extract the inlinee start/end nodes. // Extract the inlinee start/end nodes.
......
...@@ -549,9 +549,8 @@ class PipelineCompilationJob final : public CompilationJob { ...@@ -549,9 +549,8 @@ class PipelineCompilationJob final : public CompilationJob {
// Note that the CompilationInfo is not initialized at the time we pass it // Note that the CompilationInfo is not initialized at the time we pass it
// to the CompilationJob constructor, but it is not dereferenced there. // to the CompilationJob constructor, but it is not dereferenced there.
: CompilationJob(isolate, &info_, "TurboFan"), : CompilationJob(isolate, &info_, "TurboFan"),
zone_(isolate->allocator(), ZONE_NAME), parse_info_(handle(function->shared())),
zone_stats_(isolate->allocator()), zone_stats_(isolate->allocator()),
parse_info_(&zone_, handle(function->shared())),
info_(&parse_info_, function), info_(&parse_info_, function),
pipeline_statistics_(CreatePipelineStatistics(info(), &zone_stats_)), pipeline_statistics_(CreatePipelineStatistics(info(), &zone_stats_)),
data_(&zone_stats_, info(), pipeline_statistics_.get()), data_(&zone_stats_, info(), pipeline_statistics_.get()),
...@@ -564,9 +563,8 @@ class PipelineCompilationJob final : public CompilationJob { ...@@ -564,9 +563,8 @@ class PipelineCompilationJob final : public CompilationJob {
Status FinalizeJobImpl() final; Status FinalizeJobImpl() final;
private: private:
Zone zone_;
ZoneStats zone_stats_;
ParseInfo parse_info_; ParseInfo parse_info_;
ZoneStats zone_stats_;
CompilationInfo info_; CompilationInfo info_;
std::unique_ptr<PipelineStatistics> pipeline_statistics_; std::unique_ptr<PipelineStatistics> pipeline_statistics_;
PipelineData data_; PipelineData data_;
...@@ -603,7 +601,8 @@ PipelineCompilationJob::Status PipelineCompilationJob::PrepareJobImpl() { ...@@ -603,7 +601,8 @@ PipelineCompilationJob::Status PipelineCompilationJob::PrepareJobImpl() {
info()->MarkAsInliningEnabled(); info()->MarkAsInliningEnabled();
} }
linkage_ = new (&zone_) Linkage(Linkage::ComputeIncoming(&zone_, info())); linkage_ = new (info()->zone())
Linkage(Linkage::ComputeIncoming(info()->zone(), info()));
if (!pipeline_.CreateGraph()) { if (!pipeline_.CreateGraph()) {
if (isolate()->has_pending_exception()) return FAILED; // Stack overflowed. if (isolate()->has_pending_exception()) return FAILED; // Stack overflowed.
......
...@@ -8038,7 +8038,7 @@ bool HOptimizedGraphBuilder::TryInline(Handle<JSFunction> target, ...@@ -8038,7 +8038,7 @@ bool HOptimizedGraphBuilder::TryInline(Handle<JSFunction> target,
// Use the same AstValueFactory for creating strings in the sub-compilation // Use the same AstValueFactory for creating strings in the sub-compilation
// step, but don't transfer ownership to target_info. // step, but don't transfer ownership to target_info.
Handle<SharedFunctionInfo> target_shared(target->shared()); Handle<SharedFunctionInfo> target_shared(target->shared());
ParseInfo parse_info(zone(), target_shared); ParseInfo parse_info(target_shared, top_info()->parse_info()->zone_shared());
parse_info.set_ast_value_factory( parse_info.set_ast_value_factory(
top_info()->parse_info()->ast_value_factory()); top_info()->parse_info()->ast_value_factory());
parse_info.set_ast_value_factory_owned(false); parse_info.set_ast_value_factory_owned(false);
......
...@@ -37,8 +37,7 @@ class HCompilationJob final : public CompilationJob { ...@@ -37,8 +37,7 @@ class HCompilationJob final : public CompilationJob {
public: public:
explicit HCompilationJob(Handle<JSFunction> function) explicit HCompilationJob(Handle<JSFunction> function)
: CompilationJob(function->GetIsolate(), &info_, "Crankshaft"), : CompilationJob(function->GetIsolate(), &info_, "Crankshaft"),
zone_(function->GetIsolate()->allocator(), ZONE_NAME), parse_info_(handle(function->shared())),
parse_info_(&zone_, handle(function->shared())),
info_(&parse_info_, function), info_(&parse_info_, function),
graph_(nullptr), graph_(nullptr),
chunk_(nullptr) {} chunk_(nullptr) {}
...@@ -49,7 +48,6 @@ class HCompilationJob final : public CompilationJob { ...@@ -49,7 +48,6 @@ class HCompilationJob final : public CompilationJob {
virtual Status FinalizeJobImpl(); virtual Status FinalizeJobImpl();
private: private:
Zone zone_;
ParseInfo parse_info_; ParseInfo parse_info_;
CompilationInfo info_; CompilationInfo info_;
HGraph* graph_; HGraph* graph_;
......
...@@ -87,12 +87,11 @@ ScopeIterator::ScopeIterator(Isolate* isolate, FrameInspector* frame_inspector, ...@@ -87,12 +87,11 @@ ScopeIterator::ScopeIterator(Isolate* isolate, FrameInspector* frame_inspector,
// Reparse the code and analyze the scopes. // Reparse the code and analyze the scopes.
// Check whether we are in global, eval or function code. // Check whether we are in global, eval or function code.
Zone zone(isolate->allocator(), ZONE_NAME);
std::unique_ptr<ParseInfo> info; std::unique_ptr<ParseInfo> info;
if (scope_info->scope_type() != FUNCTION_SCOPE) { if (scope_info->scope_type() != FUNCTION_SCOPE) {
// Global or eval code. // Global or eval code.
Handle<Script> script(Script::cast(shared_info->script())); Handle<Script> script(Script::cast(shared_info->script()));
info.reset(new ParseInfo(&zone, script)); info.reset(new ParseInfo(script));
if (scope_info->scope_type() == EVAL_SCOPE) { if (scope_info->scope_type() == EVAL_SCOPE) {
info->set_eval(); info->set_eval();
if (!function->context()->IsNativeContext()) { if (!function->context()->IsNativeContext()) {
...@@ -108,7 +107,7 @@ ScopeIterator::ScopeIterator(Isolate* isolate, FrameInspector* frame_inspector, ...@@ -108,7 +107,7 @@ ScopeIterator::ScopeIterator(Isolate* isolate, FrameInspector* frame_inspector,
} }
} else { } else {
// Inner function. // Inner function.
info.reset(new ParseInfo(&zone, shared_info)); info.reset(new ParseInfo(shared_info));
} }
if (parsing::ParseAny(info.get()) && Rewriter::Rewrite(info.get())) { if (parsing::ParseAny(info.get()) && Rewriter::Rewrite(info.get())) {
DeclarationScope* scope = info->literal()->scope(); DeclarationScope* scope = info->literal()->scope();
......
...@@ -9,12 +9,13 @@ ...@@ -9,12 +9,13 @@
#include "src/heap/heap-inl.h" #include "src/heap/heap-inl.h"
#include "src/objects-inl.h" #include "src/objects-inl.h"
#include "src/objects/scope-info.h" #include "src/objects/scope-info.h"
#include "src/zone/zone.h"
namespace v8 { namespace v8 {
namespace internal { namespace internal {
ParseInfo::ParseInfo(Zone* zone) ParseInfo::ParseInfo(AccountingAllocator* zone_allocator)
: zone_(zone), : zone_(std::make_shared<Zone>(zone_allocator, ZONE_NAME)),
flags_(0), flags_(0),
source_stream_(nullptr), source_stream_(nullptr),
source_stream_encoding_(ScriptCompiler::StreamedSource::ONE_BYTE), source_stream_encoding_(ScriptCompiler::StreamedSource::ONE_BYTE),
...@@ -37,8 +38,8 @@ ParseInfo::ParseInfo(Zone* zone) ...@@ -37,8 +38,8 @@ ParseInfo::ParseInfo(Zone* zone)
function_name_(nullptr), function_name_(nullptr),
literal_(nullptr) {} literal_(nullptr) {}
ParseInfo::ParseInfo(Zone* zone, Handle<SharedFunctionInfo> shared) ParseInfo::ParseInfo(Handle<SharedFunctionInfo> shared)
: ParseInfo(zone) { : ParseInfo(shared->GetIsolate()->allocator()) {
isolate_ = shared->GetIsolate(); isolate_ = shared->GetIsolate();
set_toplevel(shared->is_toplevel()); set_toplevel(shared->is_toplevel());
...@@ -68,7 +69,14 @@ ParseInfo::ParseInfo(Zone* zone, Handle<SharedFunctionInfo> shared) ...@@ -68,7 +69,14 @@ ParseInfo::ParseInfo(Zone* zone, Handle<SharedFunctionInfo> shared)
} }
} }
ParseInfo::ParseInfo(Zone* zone, Handle<Script> script) : ParseInfo(zone) { ParseInfo::ParseInfo(Handle<SharedFunctionInfo> shared,
std::shared_ptr<Zone> zone)
: ParseInfo(shared) {
zone_.swap(zone);
}
ParseInfo::ParseInfo(Handle<Script> script)
: ParseInfo(script->GetIsolate()->allocator()) {
isolate_ = script->GetIsolate(); isolate_ = script->GetIsolate();
set_allow_lazy_parsing(); set_allow_lazy_parsing();
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
#ifndef V8_PARSING_PARSE_INFO_H_ #ifndef V8_PARSING_PARSE_INFO_H_
#define V8_PARSING_PARSE_INFO_H_ #define V8_PARSING_PARSE_INFO_H_
#include <memory>
#include "include/v8.h" #include "include/v8.h"
#include "src/globals.h" #include "src/globals.h"
#include "src/handles.h" #include "src/handles.h"
...@@ -16,6 +18,7 @@ class Extension; ...@@ -16,6 +18,7 @@ class Extension;
namespace internal { namespace internal {
class AccountingAllocator;
class AstRawString; class AstRawString;
class AstValueFactory; class AstValueFactory;
class DeclarationScope; class DeclarationScope;
...@@ -29,13 +32,18 @@ class Zone; ...@@ -29,13 +32,18 @@ class Zone;
// A container for the inputs, configuration options, and outputs of parsing. // A container for the inputs, configuration options, and outputs of parsing.
class V8_EXPORT_PRIVATE ParseInfo { class V8_EXPORT_PRIVATE ParseInfo {
public: public:
explicit ParseInfo(Zone* zone); explicit ParseInfo(AccountingAllocator* zone_allocator);
ParseInfo(Zone* zone, Handle<Script> script); ParseInfo(Handle<Script> script);
ParseInfo(Zone* zone, Handle<SharedFunctionInfo> shared); ParseInfo(Handle<SharedFunctionInfo> shared);
// TODO(rmcilroy): Remove once Hydrogen no longer needs this.
ParseInfo(Handle<SharedFunctionInfo> shared, std::shared_ptr<Zone> zone);
~ParseInfo(); ~ParseInfo();
Zone* zone() const { return zone_; } Zone* zone() const { return zone_.get(); }
std::shared_ptr<Zone> zone_shared() const { return zone_; }
// Convenience accessor methods for flags. // Convenience accessor methods for flags.
#define FLAG_ACCESSOR(flag, getter, setter) \ #define FLAG_ACCESSOR(flag, getter, setter) \
...@@ -226,7 +234,7 @@ class V8_EXPORT_PRIVATE ParseInfo { ...@@ -226,7 +234,7 @@ class V8_EXPORT_PRIVATE ParseInfo {
}; };
//------------- Inputs to parsing and scope analysis ----------------------- //------------- Inputs to parsing and scope analysis -----------------------
Zone* zone_; std::shared_ptr<Zone> zone_;
unsigned flags_; unsigned flags_;
ScriptCompiler::ExternalSourceStream* source_stream_; ScriptCompiler::ExternalSourceStream* source_stream_;
ScriptCompiler::StreamedSource::Encoding source_stream_encoding_; ScriptCompiler::StreamedSource::Encoding source_stream_encoding_;
......
...@@ -352,8 +352,7 @@ bool ComputeLocation(Isolate* isolate, MessageLocation* target) { ...@@ -352,8 +352,7 @@ bool ComputeLocation(Isolate* isolate, MessageLocation* target) {
Handle<String> RenderCallSite(Isolate* isolate, Handle<Object> object) { Handle<String> RenderCallSite(Isolate* isolate, Handle<Object> object) {
MessageLocation location; MessageLocation location;
if (ComputeLocation(isolate, &location)) { if (ComputeLocation(isolate, &location)) {
Zone zone(isolate->allocator(), ZONE_NAME); std::unique_ptr<ParseInfo> info(new ParseInfo(location.shared()));
std::unique_ptr<ParseInfo> info(new ParseInfo(&zone, location.shared()));
if (parsing::ParseAny(info.get())) { if (parsing::ParseAny(info.get())) {
CallPrinter printer(isolate, location.shared()->IsUserJavaScript()); CallPrinter printer(isolate, location.shared()->IsUserJavaScript());
Handle<String> str = printer.Print(info->literal(), location.start_pos()); Handle<String> str = printer.Print(info->literal(), location.start_pos());
......
...@@ -45,33 +45,32 @@ class AsmTyperHarnessBuilder { ...@@ -45,33 +45,32 @@ class AsmTyperHarnessBuilder {
: source_(source), : source_(source),
validation_type_(type), validation_type_(type),
handles_(), handles_(),
zone_(handles_.main_zone()),
isolate_(CcTest::i_isolate()), isolate_(CcTest::i_isolate()),
ast_value_factory_(zone_, isolate_->ast_string_constants(),
isolate_->heap()->HashSeed()),
factory_(isolate_->factory()), factory_(isolate_->factory()),
source_code_( source_code_(
factory_->NewStringFromUtf8(CStrVector(source)).ToHandleChecked()), factory_->NewStringFromUtf8(CStrVector(source)).ToHandleChecked()),
script_(factory_->NewScript(source_code_)) { script_(factory_->NewScript(source_code_)),
ParseInfo info(zone_, script_); info_(script_),
info.set_allow_lazy_parsing(false); ast_value_factory_(info_.zone(), isolate_->ast_string_constants(),
info.set_toplevel(true); isolate_->heap()->HashSeed()) {
info.set_ast_value_factory(&ast_value_factory_); info_.set_allow_lazy_parsing(false);
info.set_ast_value_factory_owned(false); info_.set_toplevel(true);
Parser parser(&info); info_.set_ast_value_factory(&ast_value_factory_);
info_.set_ast_value_factory_owned(false);
if (!Compiler::ParseAndAnalyze(&info)) { Parser parser(&info_);
if (!Compiler::ParseAndAnalyze(&info_)) {
std::cerr << "Failed to parse:\n" << source_ << "\n"; std::cerr << "Failed to parse:\n" << source_ << "\n";
CHECK(false); CHECK(false);
} }
outer_scope_ = info.script_scope(); outer_scope_ = info_.script_scope();
module_ = info.scope() module_ = info_.scope()
->declarations() ->declarations()
->AtForTest(0) ->AtForTest(0)
->AsFunctionDeclaration() ->AsFunctionDeclaration()
->fun(); ->fun();
typer_.reset(new AsmTyper(isolate_, zone_, script_, module_)); typer_.reset(new AsmTyper(isolate_, zone(), script_, module_));
if (validation_type_ == ValidateStatement || if (validation_type_ == ValidateStatement ||
validation_type_ == ValidateExpression) { validation_type_ == ValidateExpression) {
...@@ -104,7 +103,7 @@ class AsmTyperHarnessBuilder { ...@@ -104,7 +103,7 @@ class AsmTyperHarnessBuilder {
if (var->IsUnallocated()) { if (var->IsUnallocated()) {
var->AllocateTo(VariableLocation::LOCAL, -1); var->AllocateTo(VariableLocation::LOCAL, -1);
} }
auto* var_info = new (zone_) AsmTyper::VariableInfo(type); auto* var_info = new (zone()) AsmTyper::VariableInfo(type);
var_info->set_mutability(AsmTyper::VariableInfo::kLocal); var_info->set_mutability(AsmTyper::VariableInfo::kLocal);
CHECK(typer_->AddLocal(var, var_info)); CHECK(typer_->AddLocal(var, var_info));
return this; return this;
...@@ -116,7 +115,7 @@ class AsmTyperHarnessBuilder { ...@@ -116,7 +115,7 @@ class AsmTyperHarnessBuilder {
var->AllocateTo(VariableLocation::MODULE, -1); var->AllocateTo(VariableLocation::MODULE, -1);
} }
if (type != nullptr) { if (type != nullptr) {
auto* var_info = new (zone_) AsmTyper::VariableInfo(type); auto* var_info = new (zone()) AsmTyper::VariableInfo(type);
var_info->set_mutability(AsmTyper::VariableInfo::kMutableGlobal); var_info->set_mutability(AsmTyper::VariableInfo::kMutableGlobal);
CHECK(typer_->AddGlobal(var, var_info)); CHECK(typer_->AddGlobal(var, var_info));
} }
...@@ -125,12 +124,12 @@ class AsmTyperHarnessBuilder { ...@@ -125,12 +124,12 @@ class AsmTyperHarnessBuilder {
AsmTyperHarnessBuilder* WithGlobal( AsmTyperHarnessBuilder* WithGlobal(
VariableName var_name, std::function<AsmType*(Zone*)> type_creator) { VariableName var_name, std::function<AsmType*(Zone*)> type_creator) {
return WithGlobal(var_name, type_creator(zone_)); return WithGlobal(var_name, type_creator(zone()));
} }
AsmTyperHarnessBuilder* WithUndefinedGlobal( AsmTyperHarnessBuilder* WithUndefinedGlobal(
VariableName var_name, std::function<AsmType*(Zone*)> type_creator) { VariableName var_name, std::function<AsmType*(Zone*)> type_creator) {
auto* type = type_creator(zone_); auto* type = type_creator(zone());
CHECK(type->AsFunctionType() != nullptr || CHECK(type->AsFunctionType() != nullptr ||
type->AsFunctionTableType() != nullptr); type->AsFunctionTableType() != nullptr);
WithGlobal(var_name, type); WithGlobal(var_name, type);
...@@ -157,7 +156,8 @@ class AsmTyperHarnessBuilder { ...@@ -157,7 +156,8 @@ class AsmTyperHarnessBuilder {
CHECK(false); CHECK(false);
case AsmTyper::kFFI: case AsmTyper::kFFI:
stdlib_map = nullptr; stdlib_map = nullptr;
var_info = new (zone_) AsmTyper::VariableInfo(AsmType::FFIType(zone_)); var_info =
new (zone()) AsmTyper::VariableInfo(AsmType::FFIType(zone()));
var_info->set_mutability(AsmTyper::VariableInfo::kImmutableGlobal); var_info->set_mutability(AsmTyper::VariableInfo::kImmutableGlobal);
break; break;
case AsmTyper::kInfinity: case AsmTyper::kInfinity:
...@@ -176,7 +176,7 @@ class AsmTyperHarnessBuilder { ...@@ -176,7 +176,7 @@ class AsmTyperHarnessBuilder {
} }
CHECK(var_info != nullptr); CHECK(var_info != nullptr);
var_info = var_info->Clone(zone_); var_info = var_info->Clone(zone());
} }
CHECK(typer_->AddGlobal(var, var_info)); CHECK(typer_->AddGlobal(var, var_info));
...@@ -193,7 +193,7 @@ class AsmTyperHarnessBuilder { ...@@ -193,7 +193,7 @@ class AsmTyperHarnessBuilder {
AsmTyperHarnessBuilder* WithStdlib(VariableName var_name) { AsmTyperHarnessBuilder* WithStdlib(VariableName var_name) {
auto* var = DeclareVariable(var_name); auto* var = DeclareVariable(var_name);
auto* var_info = auto* var_info =
AsmTyper::VariableInfo::ForSpecialSymbol(zone_, AsmTyper::kStdlib); AsmTyper::VariableInfo::ForSpecialSymbol(zone(), AsmTyper::kStdlib);
CHECK(typer_->AddGlobal(var, var_info)); CHECK(typer_->AddGlobal(var, var_info));
return this; return this;
} }
...@@ -201,7 +201,7 @@ class AsmTyperHarnessBuilder { ...@@ -201,7 +201,7 @@ class AsmTyperHarnessBuilder {
AsmTyperHarnessBuilder* WithHeap(VariableName var_name) { AsmTyperHarnessBuilder* WithHeap(VariableName var_name) {
auto* var = DeclareVariable(var_name); auto* var = DeclareVariable(var_name);
auto* var_info = auto* var_info =
AsmTyper::VariableInfo::ForSpecialSymbol(zone_, AsmTyper::kHeap); AsmTyper::VariableInfo::ForSpecialSymbol(zone(), AsmTyper::kHeap);
CHECK(typer_->AddGlobal(var, var_info)); CHECK(typer_->AddGlobal(var, var_info));
return this; return this;
} }
...@@ -209,7 +209,7 @@ class AsmTyperHarnessBuilder { ...@@ -209,7 +209,7 @@ class AsmTyperHarnessBuilder {
AsmTyperHarnessBuilder* WithFFI(VariableName var_name) { AsmTyperHarnessBuilder* WithFFI(VariableName var_name) {
auto* var = DeclareVariable(var_name); auto* var = DeclareVariable(var_name);
auto* var_info = auto* var_info =
AsmTyper::VariableInfo::ForSpecialSymbol(zone_, AsmTyper::kFFI); AsmTyper::VariableInfo::ForSpecialSymbol(zone(), AsmTyper::kFFI);
CHECK(typer_->AddGlobal(var, var_info)); CHECK(typer_->AddGlobal(var, var_info));
return this; return this;
} }
...@@ -305,7 +305,7 @@ class AsmTyperHarnessBuilder { ...@@ -305,7 +305,7 @@ class AsmTyperHarnessBuilder {
} }
bool ValidateAllStatements(FunctionDeclaration* fun_decl) { bool ValidateAllStatements(FunctionDeclaration* fun_decl) {
AsmTyper::FlattenedStatements iter(zone_, fun_decl->fun()->body()); AsmTyper::FlattenedStatements iter(zone(), fun_decl->fun()->body());
while (auto* curr = iter.Next()) { while (auto* curr = iter.Next()) {
if (typer_->ValidateStatement(curr) == AsmType::None()) { if (typer_->ValidateStatement(curr) == AsmType::None()) {
return false; return false;
...@@ -315,7 +315,7 @@ class AsmTyperHarnessBuilder { ...@@ -315,7 +315,7 @@ class AsmTyperHarnessBuilder {
} }
AsmType* ValidateExpressionStatment(FunctionDeclaration* fun_decl) { AsmType* ValidateExpressionStatment(FunctionDeclaration* fun_decl) {
AsmTyper::FlattenedStatements iter(zone_, fun_decl->fun()->body()); AsmTyper::FlattenedStatements iter(zone(), fun_decl->fun()->body());
AsmType* ret = AsmType::None(); AsmType* ret = AsmType::None();
bool last_was_expression_statement = false; bool last_was_expression_statement = false;
while (auto* curr = iter.Next()) { while (auto* curr = iter.Next()) {
...@@ -337,15 +337,17 @@ class AsmTyperHarnessBuilder { ...@@ -337,15 +337,17 @@ class AsmTyperHarnessBuilder {
return ret; return ret;
} }
Zone* zone() { return info_.zone(); }
std::string source_; std::string source_;
ValidationType validation_type_; ValidationType validation_type_;
HandleAndZoneScope handles_; HandleAndZoneScope handles_;
Zone* zone_;
Isolate* isolate_; Isolate* isolate_;
AstValueFactory ast_value_factory_;
Factory* factory_; Factory* factory_;
Handle<String> source_code_; Handle<String> source_code_;
Handle<Script> script_; Handle<Script> script_;
ParseInfo info_;
AstValueFactory ast_value_factory_;
DeclarationScope* outer_scope_; DeclarationScope* outer_scope_;
FunctionLiteral* module_; FunctionLiteral* module_;
......
...@@ -155,8 +155,7 @@ Handle<JSFunction> FunctionTester::ForMachineGraph(Graph* graph, ...@@ -155,8 +155,7 @@ Handle<JSFunction> FunctionTester::ForMachineGraph(Graph* graph,
} }
Handle<JSFunction> FunctionTester::Compile(Handle<JSFunction> function) { Handle<JSFunction> FunctionTester::Compile(Handle<JSFunction> function) {
Zone zone(function->GetIsolate()->allocator(), ZONE_NAME); ParseInfo parse_info(handle(function->shared()));
ParseInfo parse_info(&zone, handle(function->shared()));
CompilationInfo info(&parse_info, function); CompilationInfo info(&parse_info, function);
info.SetOptimizing(); info.SetOptimizing();
...@@ -185,8 +184,7 @@ Handle<JSFunction> FunctionTester::Compile(Handle<JSFunction> function) { ...@@ -185,8 +184,7 @@ Handle<JSFunction> FunctionTester::Compile(Handle<JSFunction> function) {
// Compile the given machine graph instead of the source of the function // Compile the given machine graph instead of the source of the function
// and replace the JSFunction's code with the result. // and replace the JSFunction's code with the result.
Handle<JSFunction> FunctionTester::CompileGraph(Graph* graph) { Handle<JSFunction> FunctionTester::CompileGraph(Graph* graph) {
Zone zone(function->GetIsolate()->allocator(), ZONE_NAME); ParseInfo parse_info(handle(function->shared()));
ParseInfo parse_info(&zone, handle(function->shared()));
CompilationInfo info(&parse_info, function); CompilationInfo info(&parse_info, function);
CHECK(parsing::ParseFunction(info.parse_info())); CHECK(parsing::ParseFunction(info.parse_info()));
......
...@@ -43,7 +43,7 @@ static Handle<JSFunction> Compile(const char* source) { ...@@ -43,7 +43,7 @@ static Handle<JSFunction> Compile(const char* source) {
TEST(TestLinkageCreate) { TEST(TestLinkageCreate) {
HandleAndZoneScope handles; HandleAndZoneScope handles;
Handle<JSFunction> function = Compile("a + b"); Handle<JSFunction> function = Compile("a + b");
ParseInfo parse_info(handles.main_zone(), handle(function->shared())); ParseInfo parse_info(handle(function->shared()));
CompilationInfo info(&parse_info, function); CompilationInfo info(&parse_info, function);
CallDescriptor* descriptor = Linkage::ComputeIncoming(info.zone(), &info); CallDescriptor* descriptor = Linkage::ComputeIncoming(info.zone(), &info);
CHECK(descriptor); CHECK(descriptor);
...@@ -59,7 +59,7 @@ TEST(TestLinkageJSFunctionIncoming) { ...@@ -59,7 +59,7 @@ TEST(TestLinkageJSFunctionIncoming) {
Handle<JSFunction> function = Handle<JSFunction> function =
Handle<JSFunction>::cast(v8::Utils::OpenHandle( Handle<JSFunction>::cast(v8::Utils::OpenHandle(
*v8::Local<v8::Function>::Cast(CompileRun(sources[i])))); *v8::Local<v8::Function>::Cast(CompileRun(sources[i]))));
ParseInfo parse_info(handles.main_zone(), handle(function->shared())); ParseInfo parse_info(handle(function->shared()));
CompilationInfo info(&parse_info, function); CompilationInfo info(&parse_info, function);
CallDescriptor* descriptor = Linkage::ComputeIncoming(info.zone(), &info); CallDescriptor* descriptor = Linkage::ComputeIncoming(info.zone(), &info);
CHECK(descriptor); CHECK(descriptor);
...@@ -75,7 +75,7 @@ TEST(TestLinkageJSFunctionIncoming) { ...@@ -75,7 +75,7 @@ TEST(TestLinkageJSFunctionIncoming) {
TEST(TestLinkageJSCall) { TEST(TestLinkageJSCall) {
HandleAndZoneScope handles; HandleAndZoneScope handles;
Handle<JSFunction> function = Compile("a + c"); Handle<JSFunction> function = Compile("a + c");
ParseInfo parse_info(handles.main_zone(), handle(function->shared())); ParseInfo parse_info(handle(function->shared()));
CompilationInfo info(&parse_info, function); CompilationInfo info(&parse_info, function);
for (int i = 0; i < 32; i++) { for (int i = 0; i < 32; i++) {
......
...@@ -33,7 +33,7 @@ struct TestHelper : public HandleAndZoneScope { ...@@ -33,7 +33,7 @@ struct TestHelper : public HandleAndZoneScope {
void CheckLoopAssignedCount(int expected, const char* var_name) { void CheckLoopAssignedCount(int expected, const char* var_name) {
// TODO(titzer): don't scope analyze every single time. // TODO(titzer): don't scope analyze every single time.
ParseInfo parse_info(main_zone(), handle(function->shared())); ParseInfo parse_info(handle(function->shared()));
CompilationInfo info(&parse_info, function); CompilationInfo info(&parse_info, function);
CHECK(parsing::ParseFunction(&parse_info)); CHECK(parsing::ParseFunction(&parse_info));
......
...@@ -310,8 +310,7 @@ TEST(PreParserScopeAnalysis) { ...@@ -310,8 +310,7 @@ TEST(PreParserScopeAnalysis) {
printf("\n"); printf("\n");
i::Handle<i::Script> script = factory->NewScript(source); i::Handle<i::Script> script = factory->NewScript(source);
i::Zone zone(CcTest::i_isolate()->allocator(), ZONE_NAME); i::ParseInfo lazy_info(script);
i::ParseInfo lazy_info(&zone, script);
// No need to run scope analysis; preparser scope data is produced when // No need to run scope analysis; preparser scope data is produced when
// parsing. // parsing.
...@@ -336,7 +335,7 @@ TEST(PreParserScopeAnalysis) { ...@@ -336,7 +335,7 @@ TEST(PreParserScopeAnalysis) {
printf("\n"); printf("\n");
script = factory->NewScript(source); script = factory->NewScript(source);
i::ParseInfo eager_info(&zone, script); i::ParseInfo eager_info(script);
eager_info.set_allow_lazy_parsing(false); eager_info.set_allow_lazy_parsing(false);
CHECK(i::parsing::ParseProgram(&eager_info)); CHECK(i::parsing::ParseProgram(&eager_info));
......
This diff is collapsed.
...@@ -35,8 +35,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { ...@@ -35,8 +35,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
v8::internal::Handle<v8::internal::Script> script = v8::internal::Handle<v8::internal::Script> script =
factory->NewScript(source.ToHandleChecked()); factory->NewScript(source.ToHandleChecked());
v8::internal::Zone zone(i_isolate->allocator(), ZONE_NAME); v8::internal::ParseInfo info(script);
v8::internal::ParseInfo info(&zone, script);
v8::internal::parsing::ParseProgram(&info); v8::internal::parsing::ParseProgram(&info);
isolate->RequestGarbageCollectionForTesting( isolate->RequestGarbageCollectionForTesting(
v8::Isolate::kFullGarbageCollection); v8::Isolate::kFullGarbageCollection);
......
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
#include "src/objects-inl.h" #include "src/objects-inl.h"
#include "src/parsing/parse-info.h" #include "src/parsing/parse-info.h"
#include "src/v8.h" #include "src/v8.h"
#include "src/zone/zone.h"
#include "test/unittests/compiler-dispatcher/compiler-dispatcher-helper.h" #include "test/unittests/compiler-dispatcher/compiler-dispatcher-helper.h"
#include "test/unittests/test-utils.h" #include "test/unittests/test-utils.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -815,8 +814,7 @@ TEST_F(CompilerDispatcherTest, EnqueueParsed) { ...@@ -815,8 +814,7 @@ TEST_F(CompilerDispatcherTest, EnqueueParsed) {
Handle<JSFunction> f = Handle<JSFunction>::cast(RunJS(isolate(), script)); Handle<JSFunction> f = Handle<JSFunction>::cast(RunJS(isolate(), script));
Handle<SharedFunctionInfo> shared(f->shared(), i_isolate()); Handle<SharedFunctionInfo> shared(f->shared(), i_isolate());
Zone zone(i_isolate()->allocator(), ZONE_NAME); ParseInfo parse_info(shared);
ParseInfo parse_info(&zone, shared);
ASSERT_TRUE(Compiler::ParseAndAnalyze(&parse_info)); ASSERT_TRUE(Compiler::ParseAndAnalyze(&parse_info));
ASSERT_FALSE(dispatcher.IsEnqueued(shared)); ASSERT_FALSE(dispatcher.IsEnqueued(shared));
...@@ -841,8 +839,7 @@ TEST_F(CompilerDispatcherTest, EnqueueAndStepParsed) { ...@@ -841,8 +839,7 @@ TEST_F(CompilerDispatcherTest, EnqueueAndStepParsed) {
Handle<JSFunction> f = Handle<JSFunction>::cast(RunJS(isolate(), script)); Handle<JSFunction> f = Handle<JSFunction>::cast(RunJS(isolate(), script));
Handle<SharedFunctionInfo> shared(f->shared(), i_isolate()); Handle<SharedFunctionInfo> shared(f->shared(), i_isolate());
Zone zone(i_isolate()->allocator(), ZONE_NAME); ParseInfo parse_info(shared);
ParseInfo parse_info(&zone, shared);
ASSERT_TRUE(Compiler::ParseAndAnalyze(&parse_info)); ASSERT_TRUE(Compiler::ParseAndAnalyze(&parse_info));
ASSERT_FALSE(dispatcher.IsEnqueued(shared)); ASSERT_FALSE(dispatcher.IsEnqueued(shared));
...@@ -878,8 +875,7 @@ TEST_F(CompilerDispatcherTest, FinishAllNow) { ...@@ -878,8 +875,7 @@ TEST_F(CompilerDispatcherTest, FinishAllNow) {
ASSERT_FALSE(shared2->is_compiled()); ASSERT_FALSE(shared2->is_compiled());
// Enqueue shared1 as already parsed. // Enqueue shared1 as already parsed.
Zone zone(i_isolate()->allocator(), ZONE_NAME); ParseInfo parse_info(shared1);
ParseInfo parse_info(&zone, shared1);
ASSERT_TRUE(Compiler::ParseAndAnalyze(&parse_info)); ASSERT_TRUE(Compiler::ParseAndAnalyze(&parse_info));
ASSERT_TRUE(dispatcher.Enqueue(shared1, parse_info.literal())); ASSERT_TRUE(dispatcher.Enqueue(shared1, parse_info.literal()));
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#include "src/isolate.h" #include "src/isolate.h"
#include "src/objects-inl.h" #include "src/objects-inl.h"
#include "src/parsing/parse-info.h" #include "src/parsing/parse-info.h"
#include "src/zone/zone.h"
#include "test/unittests/compiler-dispatcher/compiler-dispatcher-helper.h" #include "test/unittests/compiler-dispatcher/compiler-dispatcher-helper.h"
#include "test/unittests/test-utils.h" #include "test/unittests/test-utils.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -29,8 +28,7 @@ class BlockingCompilationJob : public CompilationJob { ...@@ -29,8 +28,7 @@ class BlockingCompilationJob : public CompilationJob {
BlockingCompilationJob(Isolate* isolate, Handle<JSFunction> function) BlockingCompilationJob(Isolate* isolate, Handle<JSFunction> function)
: CompilationJob(isolate, &info_, "BlockingCompilationJob", : CompilationJob(isolate, &info_, "BlockingCompilationJob",
State::kReadyToExecute), State::kReadyToExecute),
zone_(isolate->allocator(), ZONE_NAME), parse_info_(handle(function->shared())),
parse_info_(&zone_, handle(function->shared())),
info_(&parse_info_, function), info_(&parse_info_, function),
blocking_(false), blocking_(false),
semaphore_(0) {} semaphore_(0) {}
...@@ -55,7 +53,6 @@ class BlockingCompilationJob : public CompilationJob { ...@@ -55,7 +53,6 @@ class BlockingCompilationJob : public CompilationJob {
Status FinalizeJobImpl() override { return SUCCEEDED; } Status FinalizeJobImpl() override { return SUCCEEDED; }
private: private:
Zone zone_;
ParseInfo parse_info_; ParseInfo parse_info_;
CompilationInfo info_; CompilationInfo info_;
base::AtomicValue<bool> blocking_; base::AtomicValue<bool> blocking_;
......
...@@ -94,8 +94,7 @@ std::pair<v8::base::TimeDelta, v8::base::TimeDelta> RunBaselineParser( ...@@ -94,8 +94,7 @@ std::pair<v8::base::TimeDelta, v8::base::TimeDelta> RunBaselineParser(
i::ScriptData* cached_data_impl = NULL; i::ScriptData* cached_data_impl = NULL;
// First round of parsing (produce data to cache). // First round of parsing (produce data to cache).
{ {
Zone zone(reinterpret_cast<i::Isolate*>(isolate)->allocator(), ZONE_NAME); ParseInfo info(script);
ParseInfo info(&zone, script);
info.set_cached_data(&cached_data_impl); info.set_cached_data(&cached_data_impl);
info.set_compile_options(v8::ScriptCompiler::kProduceParserCache); info.set_compile_options(v8::ScriptCompiler::kProduceParserCache);
v8::base::ElapsedTimer timer; v8::base::ElapsedTimer timer;
...@@ -109,8 +108,7 @@ std::pair<v8::base::TimeDelta, v8::base::TimeDelta> RunBaselineParser( ...@@ -109,8 +108,7 @@ std::pair<v8::base::TimeDelta, v8::base::TimeDelta> RunBaselineParser(
} }
// Second round of parsing (consume cached data). // Second round of parsing (consume cached data).
{ {
Zone zone(reinterpret_cast<i::Isolate*>(isolate)->allocator(), ZONE_NAME); ParseInfo info(script);
ParseInfo info(&zone, script);
info.set_cached_data(&cached_data_impl); info.set_cached_data(&cached_data_impl);
info.set_compile_options(v8::ScriptCompiler::kConsumeParserCache); info.set_compile_options(v8::ScriptCompiler::kConsumeParserCache);
v8::base::ElapsedTimer timer; v8::base::ElapsedTimer timer;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment