diff options
| author | Ben Murdoch <benm@google.com> | 2011-12-02 17:19:32 +0000 |
|---|---|---|
| committer | Ben Murdoch <benm@google.com> | 2011-12-02 17:27:49 +0000 |
| commit | 3fb3ca8c7ca439d408449a395897395c0faae8d1 (patch) | |
| tree | 5cb33db083ae7ebe431e2a460fb3806c54531f9c /src/frames.cc | |
| parent | 257744e915dfc84d6d07a6b2accf8402d9ffc708 (diff) | |
| download | android_external_v8-3fb3ca8c7ca439d408449a395897395c0faae8d1.tar.gz android_external_v8-3fb3ca8c7ca439d408449a395897395c0faae8d1.tar.bz2 android_external_v8-3fb3ca8c7ca439d408449a395897395c0faae8d1.zip | |
Upgrade to V8 3.4
Merge 3.4.14.35
Simple merge required updates to makefiles only.
Bug: 568872
Change-Id: I403a38452c547e06fcfa951c12eca12a1bc40978
Diffstat (limited to 'src/frames.cc')
| -rw-r--r-- | src/frames.cc | 42 |
1 files changed, 39 insertions, 3 deletions
diff --git a/src/frames.cc b/src/frames.cc index d81d5afa..bebd10a8 100644 --- a/src/frames.cc +++ b/src/frames.cc @@ -36,6 +36,8 @@ #include "scopeinfo.h" #include "string-stream.h" +#include "allocation-inl.h" + namespace v8 { namespace internal { @@ -346,7 +348,6 @@ void SafeStackFrameIterator::Reset() { // ------------------------------------------------------------------------- -#ifdef ENABLE_LOGGING_AND_PROFILING SafeStackTraceFrameIterator::SafeStackTraceFrameIterator( Isolate* isolate, Address fp, Address sp, Address low_bound, Address high_bound) : @@ -362,7 +363,6 @@ void SafeStackTraceFrameIterator::Advance() { if (frame()->is_java_script()) return; } } -#endif Code* StackFrame::GetSafepointData(Isolate* isolate, @@ -371,7 +371,6 @@ Code* StackFrame::GetSafepointData(Isolate* isolate, unsigned* stack_slots) { PcToCodeCache::PcToCodeCacheEntry* entry = isolate->pc_to_code_cache()->GetCacheEntry(pc); - SafepointEntry cached_safepoint_entry = entry->safepoint_entry; if (!entry->safepoint_entry.is_valid()) { entry->safepoint_entry = entry->code->GetSafepointEntry(pc); ASSERT(entry->safepoint_entry.is_valid()); @@ -528,6 +527,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 +656,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 +832,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()); |
