Index: src/frames.cc |
diff --git a/src/frames.cc b/src/frames.cc |
index 1672b1d143fc00d0ee7d52e8a62262c4e054156e..e0517c884e0cdd7cb10b6d31655bdb7dceaec6a4 100644 |
--- a/src/frames.cc |
+++ b/src/frames.cc |
@@ -579,9 +579,7 @@ void OptimizedFrame::Iterate(ObjectVisitor* v) const { |
isolate(), pc(), &safepoint_entry, &stack_slots); |
unsigned slot_space = stack_slots * kPointerSize; |
- // Visit the outgoing parameters. This is usually dealt with by the |
- // callee, but while GC'ing we artificially lower the number of |
- // arguments to zero and let the caller deal with it. |
+ // Visit the outgoing parameters. |
Object** parameters_base = &Memory::Object_at(sp()); |
Object** parameters_limit = &Memory::Object_at( |
fp() + JavaScriptFrameConstants::kFunctionOffset - slot_space); |
@@ -635,21 +633,6 @@ void OptimizedFrame::Iterate(ObjectVisitor* v) const { |
// Visit the return address in the callee and incoming arguments. |
IteratePc(v, pc_address(), code); |
- IterateArguments(v); |
-} |
- |
- |
-Object* JavaScriptFrame::GetParameter(int index) const { |
- ASSERT(index >= 0 && index < ComputeParametersCount()); |
- const int offset = JavaScriptFrameConstants::kParam0Offset; |
- return Memory::Object_at(caller_sp() + offset - (index * kPointerSize)); |
-} |
- |
- |
-int JavaScriptFrame::ComputeParametersCount() const { |
- Address base = caller_sp() + JavaScriptFrameConstants::kReceiverOffset; |
- Address limit = fp() + JavaScriptFrameConstants::kLastParameterOffset; |
- return static_cast<int>((base - limit) / kPointerSize); |
} |
@@ -669,27 +652,17 @@ Code* JavaScriptFrame::unchecked_code() const { |
} |
+int JavaScriptFrame::GetNumberOfIncomingArguments() const { |
+ ASSERT(!SafeStackFrameIterator::is_active(isolate()) && |
+ isolate()->heap()->gc_state() == Heap::NOT_IN_GC); |
+ |
+ JSFunction* function = JSFunction::cast(this->function()); |
+ return function->shared()->formal_parameter_count(); |
+} |
+ |
+ |
Address JavaScriptFrame::GetCallerStackPointer() const { |
- int arguments; |
- if (SafeStackFrameIterator::is_active(isolate()) || |
- isolate()->heap()->gc_state() != Heap::NOT_IN_GC) { |
- // If the we are currently iterating the safe stack the |
- // arguments for frames are traversed as if they were |
- // expression stack elements of the calling frame. The reason for |
- // this rather strange decision is that we cannot access the |
- // function during mark-compact GCs when objects may have been marked. |
- // In fact accessing heap objects (like function->shared() below) |
- // at all during GC is problematic. |
- arguments = 0; |
- } else { |
- // Compute the number of arguments by getting the number of formal |
- // parameters of the function. We must remember to take the |
- // receiver into account (+1). |
- JSFunction* function = JSFunction::cast(this->function()); |
- arguments = function->shared()->formal_parameter_count() + 1; |
- } |
- const int offset = StandardFrameConstants::kCallerSPOffset; |
- return fp() + offset + (arguments * kPointerSize); |
+ return fp() + StandardFrameConstants::kCallerSPOffset; |
} |
@@ -867,9 +840,7 @@ void OptimizedFrame::GetFunctions(List<JSFunction*>* functions) { |
Address ArgumentsAdaptorFrame::GetCallerStackPointer() const { |
- const int arguments = Smi::cast(GetExpression(0))->value(); |
- const int offset = StandardFrameConstants::kCallerSPOffset; |
- return fp() + offset + (arguments + 1) * kPointerSize; |
+ return fp() + StandardFrameConstants::kCallerSPOffset; |
} |
@@ -1109,17 +1080,6 @@ void StandardFrame::IterateExpressions(ObjectVisitor* v) const { |
void JavaScriptFrame::Iterate(ObjectVisitor* v) const { |
IterateExpressions(v); |
IteratePc(v, pc_address(), LookupCode()); |
- IterateArguments(v); |
-} |
- |
- |
-void JavaScriptFrame::IterateArguments(ObjectVisitor* v) const { |
- // Traverse callee-saved registers, receiver, and parameters. |
- const int kBaseOffset = JavaScriptFrameConstants::kLastParameterOffset; |
- const int kLimitOffset = JavaScriptFrameConstants::kReceiverOffset; |
- Object** base = &Memory::Object_at(fp() + kBaseOffset); |
- Object** limit = &Memory::Object_at(caller_sp() + kLimitOffset) + 1; |
- v->VisitPointers(base, limit); |
} |