Index: src/deoptimizer.cc |
diff --git a/src/deoptimizer.cc b/src/deoptimizer.cc |
index 16ac59b56967b61768b0091b0f3709b9c3a5bbed..63d8462d1f9a8e86ef709c3c60d0dafcc6cd7d71 100644 |
--- a/src/deoptimizer.cc |
+++ b/src/deoptimizer.cc |
@@ -36,7 +36,6 @@ static MemoryChunk* AllocateCodeChunk(MemoryAllocator* allocator) { |
DeoptimizerData::DeoptimizerData(MemoryAllocator* allocator) |
: allocator_(allocator), |
- deoptimized_frame_info_(NULL), |
current_(NULL) { |
for (int i = 0; i < Deoptimizer::kBailoutTypesWithCodeEntry; ++i) { |
deopt_entry_code_entries_[i] = -1; |
@@ -53,13 +52,6 @@ DeoptimizerData::~DeoptimizerData() { |
} |
-void DeoptimizerData::Iterate(ObjectVisitor* v) { |
- if (deoptimized_frame_info_ != NULL) { |
- deoptimized_frame_info_->Iterate(v); |
- } |
-} |
- |
- |
Code* Deoptimizer::FindDeoptimizingCode(Address addr) { |
if (function_->IsHeapObject()) { |
// Search all deoptimizing code in the native context of the function. |
@@ -141,7 +133,6 @@ DeoptimizedFrameInfo* Deoptimizer::DebuggerInspectableFrame( |
int jsframe_index, |
Isolate* isolate) { |
CHECK(frame->is_optimized()); |
- CHECK(isolate->deoptimizer_data()->deoptimized_frame_info_ == NULL); |
// Get the function and code from the frame. |
JSFunction* function = frame->function(); |
@@ -197,7 +188,6 @@ DeoptimizedFrameInfo* Deoptimizer::DebuggerInspectableFrame( |
frame_index, |
has_arguments_adaptor, |
has_construct_stub); |
- isolate->deoptimizer_data()->deoptimized_frame_info_ = info; |
// Done with the GC-unsafe frame descriptions. This re-enables allocation. |
deoptimizer->DeleteFrameDescriptions(); |
@@ -215,9 +205,7 @@ DeoptimizedFrameInfo* Deoptimizer::DebuggerInspectableFrame( |
void Deoptimizer::DeleteDebuggerInspectableFrame(DeoptimizedFrameInfo* info, |
Isolate* isolate) { |
- CHECK_EQ(isolate->deoptimizer_data()->deoptimized_frame_info_, info); |
delete info; |
- isolate->deoptimizer_data()->deoptimized_frame_info_ = NULL; |
} |
@@ -1920,7 +1908,7 @@ void Deoptimizer::MaterializeHeapNumbersForDebuggerInspectableFrame( |
arg_iter++; // Skip the receiver. |
for (int i = 0; i < parameter_count; i++, arg_iter++) { |
if (!arg_iter->IsMaterializedObject()) { |
- info->SetParameter(i, *(arg_iter->GetValue())); |
+ info->SetParameter(i, arg_iter->GetValue()); |
} |
} |
@@ -1931,7 +1919,7 @@ void Deoptimizer::MaterializeHeapNumbersForDebuggerInspectableFrame( |
for (int i = 0; i < expression_count; i++, iter++) { |
if (!iter->IsMaterializedObject()) { |
- info->SetExpression(i, *(iter->GetValue())); |
+ info->SetExpression(i, iter->GetValue()); |
} |
} |
} |
@@ -2508,24 +2496,27 @@ DeoptimizedFrameInfo::DeoptimizedFrameInfo(Deoptimizer* deoptimizer, |
bool has_arguments_adaptor, |
bool has_construct_stub) { |
FrameDescription* output_frame = deoptimizer->output_[frame_index]; |
- function_ = output_frame->GetFunction(); |
- context_ = reinterpret_cast<Object*>(output_frame->GetContext()); |
+ function_ = |
+ Handle<JSFunction>(output_frame->GetFunction(), deoptimizer->isolate()); |
+ context_ = |
+ Handle<Object>(reinterpret_cast<Object*>(output_frame->GetContext()), |
+ deoptimizer->isolate()); |
has_construct_stub_ = has_construct_stub; |
- expression_count_ = output_frame->GetExpressionCount(); |
- expression_stack_ = new Object* [expression_count_]; |
+ expression_stack_.resize( |
+ static_cast<size_t>(output_frame->GetExpressionCount())); |
// Get the source position using the unoptimized code. |
Address pc = reinterpret_cast<Address>(output_frame->GetPc()); |
Code* code = Code::cast(deoptimizer->isolate()->FindCodeObject(pc)); |
int offset = static_cast<int>(pc - code->instruction_start()); |
source_position_ = code->SourcePosition(offset); |
- for (int i = 0; i < expression_count_; i++) { |
+ for (int i = 0; i < static_cast<int>(expression_count()); i++) { |
Object* value = output_frame->GetExpression(i); |
// Replace materialization markers with the undefined value. |
if (value == deoptimizer->isolate()->heap()->arguments_marker()) { |
value = deoptimizer->isolate()->heap()->undefined_value(); |
} |
- SetExpression(i, value); |
+ SetExpression(i, Handle<Object>(value, deoptimizer->isolate())); |
} |
if (has_arguments_adaptor) { |
@@ -2533,33 +2524,19 @@ DeoptimizedFrameInfo::DeoptimizedFrameInfo(Deoptimizer* deoptimizer, |
CHECK_EQ(output_frame->GetFrameType(), StackFrame::ARGUMENTS_ADAPTOR); |
} |
- parameters_count_ = output_frame->ComputeParametersCount(); |
- parameters_ = new Object* [parameters_count_]; |
- for (int i = 0; i < parameters_count_; i++) { |
+ parameters_.resize( |
+ static_cast<size_t>(output_frame->ComputeParametersCount())); |
+ for (int i = 0; i < output_frame->ComputeParametersCount(); i++) { |
Object* value = output_frame->GetParameter(i); |
// Replace materialization markers with the undefined value. |
if (value == deoptimizer->isolate()->heap()->arguments_marker()) { |
value = deoptimizer->isolate()->heap()->undefined_value(); |
} |
- SetParameter(i, value); |
+ SetParameter(i, Handle<Object>(value, deoptimizer->isolate())); |
} |
} |
-DeoptimizedFrameInfo::~DeoptimizedFrameInfo() { |
- delete[] expression_stack_; |
- delete[] parameters_; |
-} |
- |
- |
-void DeoptimizedFrameInfo::Iterate(ObjectVisitor* v) { |
- v->VisitPointer(bit_cast<Object**>(&function_)); |
- v->VisitPointer(&context_); |
- v->VisitPointers(parameters_, parameters_ + parameters_count_); |
- v->VisitPointers(expression_stack_, expression_stack_ + expression_count_); |
-} |
- |
- |
const char* Deoptimizer::GetDeoptReason(DeoptReason deopt_reason) { |
DCHECK(deopt_reason < kLastDeoptReason); |
#define DEOPT_MESSAGES_TEXTS(C, T) T, |