Index: src/compiler.cc |
diff --git a/src/compiler.cc b/src/compiler.cc |
index 632f3bd9bb345115094b9b1cd9dc59f220c6701c..f706c7d03bedee9d4e4bb79033396a2f5aeb3615 100644 |
--- a/src/compiler.cc |
+++ b/src/compiler.cc |
@@ -51,7 +51,7 @@ namespace v8 { |
namespace internal { |
-CompilationInfo::CompilationInfo(Handle<Script> script) |
+CompilationInfo::CompilationInfo(Handle<Script> script, Zone* zone) |
: isolate_(script->GetIsolate()), |
flags_(LanguageModeField::encode(CLASSIC_MODE)), |
function_(NULL), |
@@ -60,12 +60,14 @@ CompilationInfo::CompilationInfo(Handle<Script> script) |
script_(script), |
extension_(NULL), |
pre_parse_data_(NULL), |
- osr_ast_id_(AstNode::kNoNumber) { |
+ osr_ast_id_(AstNode::kNoNumber), |
+ zone_(zone) { |
Initialize(BASE); |
} |
-CompilationInfo::CompilationInfo(Handle<SharedFunctionInfo> shared_info) |
+CompilationInfo::CompilationInfo(Handle<SharedFunctionInfo> shared_info, |
+ Zone* zone) |
: isolate_(shared_info->GetIsolate()), |
flags_(LanguageModeField::encode(CLASSIC_MODE) | |
IsLazy::encode(true)), |
@@ -76,12 +78,13 @@ CompilationInfo::CompilationInfo(Handle<SharedFunctionInfo> shared_info) |
script_(Handle<Script>(Script::cast(shared_info->script()))), |
extension_(NULL), |
pre_parse_data_(NULL), |
- osr_ast_id_(AstNode::kNoNumber) { |
+ osr_ast_id_(AstNode::kNoNumber), |
+ zone_(zone) { |
Initialize(BASE); |
} |
-CompilationInfo::CompilationInfo(Handle<JSFunction> closure) |
+CompilationInfo::CompilationInfo(Handle<JSFunction> closure, Zone* zone) |
: isolate_(closure->GetIsolate()), |
flags_(LanguageModeField::encode(CLASSIC_MODE) | |
IsLazy::encode(true)), |
@@ -93,7 +96,8 @@ CompilationInfo::CompilationInfo(Handle<JSFunction> closure) |
script_(Handle<Script>(Script::cast(shared_info_->script()))), |
extension_(NULL), |
pre_parse_data_(NULL), |
- osr_ast_id_(AstNode::kNoNumber) { |
+ osr_ast_id_(AstNode::kNoNumber), |
+ zone_(zone) { |
Initialize(BASE); |
} |
@@ -261,7 +265,7 @@ static bool MakeCrankshaftCode(CompilationInfo* info) { |
bool should_recompile = !info->shared_info()->has_deoptimization_support(); |
if (should_recompile || FLAG_hydrogen_stats) { |
HPhase phase(HPhase::kFullCodeGen); |
- CompilationInfo unoptimized(info->shared_info()); |
+ CompilationInfoWithZone unoptimized(info->shared_info()); |
// Note that we use the same AST that we will use for generating the |
// optimized code. |
unoptimized.SetFunction(info->function()); |
@@ -294,8 +298,8 @@ static bool MakeCrankshaftCode(CompilationInfo* info) { |
Handle<Context> global_context(info->closure()->context()->global_context()); |
TypeFeedbackOracle oracle(code, global_context, info->isolate(), |
- info->isolate()->zone()); |
- HGraphBuilder builder(info, &oracle, info->isolate()->zone()); |
+ info->zone()); |
+ HGraphBuilder builder(info, &oracle); |
HPhase phase(HPhase::kTotal); |
HGraph* graph = builder.CreateGraph(); |
if (info->isolate()->has_pending_exception()) { |
@@ -304,7 +308,7 @@ static bool MakeCrankshaftCode(CompilationInfo* info) { |
} |
if (graph != NULL) { |
- Handle<Code> optimized_code = graph->Compile(info, graph->zone()); |
+ Handle<Code> optimized_code = graph->Compile(); |
if (!optimized_code.is_null()) { |
info->SetCode(optimized_code); |
FinishOptimization(info->closure(), start); |
@@ -347,7 +351,7 @@ bool Compiler::MakeCodeForLiveEdit(CompilationInfo* info) { |
bool succeeded = MakeCode(info); |
if (!info->shared_info().is_null()) { |
Handle<ScopeInfo> scope_info = ScopeInfo::Create(info->scope(), |
- info->isolate()->zone()); |
+ info->zone()); |
info->shared_info()->set_scope_info(*scope_info); |
} |
return succeeded; |
@@ -357,7 +361,7 @@ bool Compiler::MakeCodeForLiveEdit(CompilationInfo* info) { |
static Handle<SharedFunctionInfo> MakeFunctionInfo(CompilationInfo* info) { |
Isolate* isolate = info->isolate(); |
- ZoneScope zone_scope(isolate, DELETE_ON_EXIT); |
+ ZoneScope zone_scope(info->zone(), DELETE_ON_EXIT); |
PostponeInterruptsScope postpone(isolate); |
ASSERT(!isolate->global_context().is_null()); |
@@ -421,7 +425,7 @@ static Handle<SharedFunctionInfo> MakeFunctionInfo(CompilationInfo* info) { |
lit->name(), |
lit->materialized_literal_count(), |
info->code(), |
- ScopeInfo::Create(info->scope(), info->isolate()->zone())); |
+ ScopeInfo::Create(info->scope(), info->zone())); |
ASSERT_EQ(RelocInfo::kNoPosition, lit->function_token_position()); |
Compiler::SetFunctionInfo(result, lit, true, script); |
@@ -463,7 +467,7 @@ static Handle<SharedFunctionInfo> MakeFunctionInfo(CompilationInfo* info) { |
script, Debugger::NO_AFTER_COMPILE_FLAGS); |
#endif |
- live_edit_tracker.RecordFunctionInfo(result, lit, isolate->zone()); |
+ live_edit_tracker.RecordFunctionInfo(result, lit, info->zone()); |
return result; |
} |
@@ -521,7 +525,7 @@ Handle<SharedFunctionInfo> Compiler::Compile(Handle<String> source, |
: *script_data); |
// Compile the function and add it to the cache. |
- CompilationInfo info(script); |
+ CompilationInfoWithZone info(script); |
info.MarkAsGlobal(); |
info.SetExtension(extension); |
info.SetPreParseData(pre_data); |
@@ -569,7 +573,7 @@ Handle<SharedFunctionInfo> Compiler::CompileEval(Handle<String> source, |
if (result.is_null()) { |
// Create a script object describing the script to be compiled. |
Handle<Script> script = isolate->factory()->NewScript(source); |
- CompilationInfo info(script); |
+ CompilationInfoWithZone info(script); |
info.MarkAsEval(); |
if (is_global) info.MarkAsGlobal(); |
info.SetLanguageMode(language_mode); |
@@ -604,7 +608,7 @@ Handle<SharedFunctionInfo> Compiler::CompileEval(Handle<String> source, |
bool Compiler::CompileLazy(CompilationInfo* info) { |
Isolate* isolate = info->isolate(); |
- ZoneScope zone_scope(isolate, DELETE_ON_EXIT); |
+ ZoneScope zone_scope(info->zone(), DELETE_ON_EXIT); |
// The VM is in the COMPILER state until exiting this function. |
VMState state(isolate, COMPILER); |
@@ -692,7 +696,7 @@ bool Compiler::CompileLazy(CompilationInfo* info) { |
// trigger a GC, causing the ASSERT below to be invalid if the code |
// was flushed. By setting the code object last we avoid this. |
Handle<ScopeInfo> scope_info = |
- ScopeInfo::Create(info->scope(), info->isolate()->zone()); |
+ ScopeInfo::Create(info->scope(), info->zone()); |
shared->set_scope_info(*scope_info); |
shared->set_code(*code); |
if (!function.is_null()) { |
@@ -727,7 +731,7 @@ bool Compiler::CompileLazy(CompilationInfo* info) { |
// active as it makes no sense to compile optimized code then. |
if (FLAG_always_opt && |
!Isolate::Current()->DebuggerHasBreakPoints()) { |
- CompilationInfo optimized(function); |
+ CompilationInfoWithZone optimized(function); |
optimized.SetOptimizing(AstNode::kNoNumber); |
return CompileLazy(&optimized); |
} |
@@ -746,7 +750,7 @@ bool Compiler::CompileLazy(CompilationInfo* info) { |
Handle<SharedFunctionInfo> Compiler::BuildFunctionInfo(FunctionLiteral* literal, |
Handle<Script> script) { |
// Precondition: code has been parsed and scopes have been analyzed. |
- CompilationInfo info(script); |
+ CompilationInfoWithZone info(script); |
info.SetFunction(literal); |
info.SetScope(literal->scope()); |
info.SetLanguageMode(literal->scope()->language_mode()); |
@@ -775,7 +779,7 @@ Handle<SharedFunctionInfo> Compiler::BuildFunctionInfo(FunctionLiteral* literal, |
} else if ((V8::UseCrankshaft() && MakeCrankshaftCode(&info)) || |
(!V8::UseCrankshaft() && FullCodeGenerator::MakeCode(&info))) { |
ASSERT(!info.code().is_null()); |
- scope_info = ScopeInfo::Create(info.scope(), info.isolate()->zone()); |
+ scope_info = ScopeInfo::Create(info.scope(), info.zone()); |
} else { |
return Handle<SharedFunctionInfo>::null(); |
} |
@@ -795,7 +799,7 @@ Handle<SharedFunctionInfo> Compiler::BuildFunctionInfo(FunctionLiteral* literal, |
// the resulting function. |
SetExpectedNofPropertiesFromEstimate(result, |
literal->expected_property_count()); |
- live_edit_tracker.RecordFunctionInfo(result, literal, info.isolate()->zone()); |
+ live_edit_tracker.RecordFunctionInfo(result, literal, info.zone()); |
return result; |
} |