Index: src/isolate.cc |
diff --git a/src/isolate.cc b/src/isolate.cc |
index ef4e0af647128c51e7e0f4f0948935ca52c30491..9683ce71a677cd64c92131c10a357d638df75aec 100644 |
--- a/src/isolate.cc |
+++ b/src/isolate.cc |
@@ -1619,6 +1619,7 @@ Isolate::Isolate() |
string_tracker_(NULL), |
regexp_stack_(NULL), |
date_cache_(NULL), |
+ code_stub_interface_descriptors_(NULL), |
context_exit_happened_(false), |
deferred_handles_head_(NULL), |
optimizing_compiler_thread_(this) { |
@@ -1781,6 +1782,9 @@ Isolate::~Isolate() { |
delete date_cache_; |
date_cache_ = NULL; |
+ delete[] code_stub_interface_descriptors_; |
+ code_stub_interface_descriptors_ = NULL; |
+ |
delete regexp_stack_; |
regexp_stack_ = NULL; |
@@ -1944,6 +1948,10 @@ bool Isolate::Init(Deserializer* des) { |
regexp_stack_ = new RegExpStack(); |
regexp_stack_->isolate_ = this; |
date_cache_ = new DateCache(); |
+ code_stub_interface_descriptors_ = |
+ new CodeStubInterfaceDescriptor*[CodeStub::NUMBER_OF_IDS]; |
+ memset(code_stub_interface_descriptors_, 0, |
+ kPointerSize * CodeStub::NUMBER_OF_IDS); |
// Enable logging before setting up the heap |
logger_->SetUp(); |
@@ -2004,6 +2012,8 @@ bool Isolate::Init(Deserializer* des) { |
debug_->SetUp(create_heap_objects); |
#endif |
+ deoptimizer_data_ = new DeoptimizerData; |
+ |
// If we are deserializing, read the state into the now-empty heap. |
if (!create_heap_objects) { |
des->Deserialize(); |
@@ -2022,7 +2032,6 @@ bool Isolate::Init(Deserializer* des) { |
// Quiet the heap NaN if needed on target platform. |
if (!create_heap_objects) Assembler::QuietNaN(heap_.nan_value()); |
- deoptimizer_data_ = new DeoptimizerData; |
runtime_profiler_ = new RuntimeProfiler(this); |
runtime_profiler_->SetUp(); |
@@ -2044,6 +2053,17 @@ bool Isolate::Init(Deserializer* des) { |
state_ = INITIALIZED; |
time_millis_at_init_ = OS::TimeCurrentMillis(); |
+ |
+ if (!create_heap_objects) { |
+ // Now that the heap is consistent, it's OK to generate the code for the |
+ // deopt entry table that might have been referred to by optimized code in |
+ // the snapshot. |
+ HandleScope scope(this); |
+ Deoptimizer::EnsureCodeForDeoptimizationEntry( |
+ Deoptimizer::LAZY, |
+ kDeoptTableSerializeEntryCount - 1); |
+ } |
+ |
if (FLAG_parallel_recompilation) optimizing_compiler_thread_.Start(); |
return true; |
} |