diff options
author | isaacs <i@izs.me> | 2012-03-12 21:46:36 -0700 |
---|---|---|
committer | isaacs <i@izs.me> | 2012-03-12 21:46:36 -0700 |
commit | e4fc2cbfd354d8ad74c465e508531d92de2b4d52 (patch) | |
tree | ce1e20dddced61d5b56750743ddb7304846f537a /deps/v8/src/deoptimizer.cc | |
parent | bcb0cc0b184c61313541002e504948ed21f59dad (diff) | |
download | node-new-e4fc2cbfd354d8ad74c465e508531d92de2b4d52.tar.gz |
Upgrade v8 to 3.9.17
Diffstat (limited to 'deps/v8/src/deoptimizer.cc')
-rw-r--r-- | deps/v8/src/deoptimizer.cc | 40 |
1 files changed, 34 insertions, 6 deletions
diff --git a/deps/v8/src/deoptimizer.cc b/deps/v8/src/deoptimizer.cc index 55ecc71dab..d069a4507e 100644 --- a/deps/v8/src/deoptimizer.cc +++ b/deps/v8/src/deoptimizer.cc @@ -170,8 +170,16 @@ DeoptimizedFrameInfo* Deoptimizer::DebuggerInspectableFrame( deoptimizer->output_[frame_index - 1]->GetFrameType() == StackFrame::ARGUMENTS_ADAPTOR; - DeoptimizedFrameInfo* info = - new DeoptimizedFrameInfo(deoptimizer, frame_index, has_arguments_adaptor); + int construct_offset = has_arguments_adaptor ? 2 : 1; + bool has_construct_stub = + frame_index >= construct_offset && + deoptimizer->output_[frame_index - construct_offset]->GetFrameType() == + StackFrame::CONSTRUCT; + + DeoptimizedFrameInfo* info = new DeoptimizedFrameInfo(deoptimizer, + frame_index, + has_arguments_adaptor, + has_construct_stub); isolate->deoptimizer_data()->deoptimized_frame_info_ = info; // Get the "simulated" top and size for the requested frame. @@ -570,6 +578,9 @@ void Deoptimizer::DoComputeOutputFrames() { case Translation::ARGUMENTS_ADAPTOR_FRAME: DoComputeArgumentsAdaptorFrame(&iterator, i); break; + case Translation::CONSTRUCT_STUB_FRAME: + DoComputeConstructStubFrame(&iterator, i); + break; default: UNREACHABLE(); break; @@ -686,6 +697,7 @@ void Deoptimizer::DoTranslateCommand(TranslationIterator* iterator, case Translation::BEGIN: case Translation::JS_FRAME: case Translation::ARGUMENTS_ADAPTOR_FRAME: + case Translation::CONSTRUCT_STUB_FRAME: case Translation::DUPLICATE: UNREACHABLE(); return; @@ -873,6 +885,7 @@ bool Deoptimizer::DoOsrTranslateCommand(TranslationIterator* iterator, case Translation::BEGIN: case Translation::JS_FRAME: case Translation::ARGUMENTS_ADAPTOR_FRAME: + case Translation::CONSTRUCT_STUB_FRAME: case Translation::DUPLICATE: UNREACHABLE(); // Malformed input. return false; @@ -1206,7 +1219,8 @@ FrameDescription::FrameDescription(uint32_t frame_size, function_(function), top_(kZapUint32), pc_(kZapUint32), - fp_(kZapUint32) { + fp_(kZapUint32), + context_(kZapUint32) { // Zap all the registers. for (int r = 0; r < Register::kNumRegisters; r++) { SetRegister(r, kZapUint32); @@ -1320,6 +1334,13 @@ Handle<ByteArray> TranslationBuffer::CreateByteArray() { } +void Translation::BeginConstructStubFrame(int literal_id, unsigned height) { + buffer_->Add(CONSTRUCT_STUB_FRAME); + buffer_->Add(literal_id); + buffer_->Add(height); +} + + void Translation::BeginArgumentsAdaptorFrame(int literal_id, unsigned height) { buffer_->Add(ARGUMENTS_ADAPTOR_FRAME); buffer_->Add(literal_id); @@ -1402,6 +1423,7 @@ int Translation::NumberOfOperandsFor(Opcode opcode) { return 1; case BEGIN: case ARGUMENTS_ADAPTOR_FRAME: + case CONSTRUCT_STUB_FRAME: return 2; case JS_FRAME: return 3; @@ -1421,6 +1443,8 @@ const char* Translation::StringFor(Opcode opcode) { return "JS_FRAME"; case ARGUMENTS_ADAPTOR_FRAME: return "ARGUMENTS_ADAPTOR_FRAME"; + case CONSTRUCT_STUB_FRAME: + return "CONSTRUCT_STUB_FRAME"; case REGISTER: return "REGISTER"; case INT32_REGISTER: @@ -1476,6 +1500,7 @@ SlotRef SlotRef::ComputeSlotForNextArgument(TranslationIterator* iterator, case Translation::BEGIN: case Translation::JS_FRAME: case Translation::ARGUMENTS_ADAPTOR_FRAME: + case Translation::CONSTRUCT_STUB_FRAME: // Peeled off before getting here. break; @@ -1598,10 +1623,13 @@ Vector<SlotRef> SlotRef::ComputeSlotMappingForArguments( #ifdef ENABLE_DEBUGGER_SUPPORT -DeoptimizedFrameInfo::DeoptimizedFrameInfo( - Deoptimizer* deoptimizer, int frame_index, bool has_arguments_adaptor) { +DeoptimizedFrameInfo::DeoptimizedFrameInfo(Deoptimizer* deoptimizer, + int frame_index, + bool has_arguments_adaptor, + bool has_construct_stub) { FrameDescription* output_frame = deoptimizer->output_[frame_index]; - SetFunction(output_frame->GetFunction()); + function_ = output_frame->GetFunction(); + has_construct_stub_ = has_construct_stub; expression_count_ = output_frame->GetExpressionCount(); expression_stack_ = new Object*[expression_count_]; // Get the source position using the unoptimized code. |