diff options
Diffstat (limited to 'deps/v8/src/frames.cc')
-rw-r--r-- | deps/v8/src/frames.cc | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/deps/v8/src/frames.cc b/deps/v8/src/frames.cc index d81d5afaaa..4e67463f1f 100644 --- a/deps/v8/src/frames.cc +++ b/deps/v8/src/frames.cc @@ -528,6 +528,17 @@ Address StandardFrame::GetExpressionAddress(int n) const { } +Object* StandardFrame::GetExpression(Address fp, int index) { + return Memory::Object_at(GetExpressionAddress(fp, index)); +} + + +Address StandardFrame::GetExpressionAddress(Address fp, int n) { + const int offset = StandardFrameConstants::kExpressionsOffset; + return fp + offset - n * kPointerSize; +} + + int StandardFrame::ComputeExpressionsCount() const { const int offset = StandardFrameConstants::kExpressionsOffset + kPointerSize; @@ -646,6 +657,16 @@ bool JavaScriptFrame::IsConstructor() const { } +int JavaScriptFrame::GetArgumentsLength() const { + // If there is an arguments adaptor frame get the arguments length from it. + if (has_adapted_arguments()) { + return Smi::cast(GetExpression(caller_fp(), 0))->value(); + } else { + return GetNumberOfIncomingArguments(); + } +} + + Code* JavaScriptFrame::unchecked_code() const { JSFunction* function = JSFunction::cast(this->function()); return function->unchecked_code(); @@ -812,6 +833,22 @@ DeoptimizationInputData* OptimizedFrame::GetDeoptimizationData( } +int OptimizedFrame::GetInlineCount() { + ASSERT(is_optimized()); + + int deopt_index = Safepoint::kNoDeoptimizationIndex; + DeoptimizationInputData* data = GetDeoptimizationData(&deopt_index); + + TranslationIterator it(data->TranslationByteArray(), + data->TranslationIndex(deopt_index)->value()); + Translation::Opcode opcode = static_cast<Translation::Opcode>(it.Next()); + ASSERT(opcode == Translation::BEGIN); + USE(opcode); + int frame_count = it.Next(); + return frame_count; +} + + void OptimizedFrame::GetFunctions(List<JSFunction*>* functions) { ASSERT(functions->length() == 0); ASSERT(is_optimized()); |