| Index: src/frames.cc
|
| diff --git a/src/frames.cc b/src/frames.cc
|
| index adf807a90a1c742137b808737fbb3fe1bd04b855..ee8d618bd8958c2b0ed08df54573068a746ce980 100644
|
| --- a/src/frames.cc
|
| +++ b/src/frames.cc
|
| @@ -602,23 +602,14 @@ Address StandardFrame::GetExpressionAddress(int n) const {
|
| return fp() + offset - n * kPointerSize;
|
| }
|
|
|
| -
|
| -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;
|
| +Address InterpretedFrame::GetExpressionAddress(int n) const {
|
| + const int offset = InterpreterFrameConstants::kExpressionsOffset;
|
| + return fp() + offset - n * kPointerSize;
|
| }
|
|
|
| -
|
| int StandardFrame::ComputeExpressionsCount() const {
|
| - const int offset =
|
| - StandardFrameConstants::kExpressionsOffset + kPointerSize;
|
| - Address base = fp() + offset;
|
| - Address limit = sp();
|
| + Address base = GetExpressionAddress(0);
|
| + Address limit = sp() - kPointerSize;
|
| DCHECK(base >= limit); // stack grows downwards
|
| // Include register-allocated locals in number of expressions.
|
| return static_cast<int>((base - limit) / kPointerSize);
|
| @@ -765,9 +756,7 @@ bool JavaScriptFrame::HasInlinedFrames() const {
|
| int JavaScriptFrame::GetArgumentsLength() const {
|
| // If there is an arguments adaptor frame get the arguments length from it.
|
| if (has_adapted_arguments()) {
|
| - STATIC_ASSERT(ArgumentsAdaptorFrameConstants::kLengthOffset ==
|
| - StandardFrameConstants::kExpressionsOffset);
|
| - return Smi::cast(GetExpression(caller_fp(), 0))->value();
|
| + return ArgumentsAdaptorFrame::GetLength(caller_fp());
|
| } else {
|
| return GetNumberOfIncomingArguments();
|
| }
|
| @@ -1138,38 +1127,43 @@ int InterpretedFrame::LookupExceptionHandlerInTable(
|
|
|
| int InterpretedFrame::GetBytecodeOffset() const {
|
| const int index = InterpreterFrameConstants::kBytecodeOffsetExpressionIndex;
|
| - DCHECK_EQ(InterpreterFrameConstants::kBytecodeOffsetFromFp,
|
| - StandardFrameConstants::kExpressionsOffset - index * kPointerSize);
|
| + DCHECK_EQ(
|
| + InterpreterFrameConstants::kBytecodeOffsetFromFp,
|
| + InterpreterFrameConstants::kExpressionsOffset - index * kPointerSize);
|
| int raw_offset = Smi::cast(GetExpression(index))->value();
|
| return raw_offset - BytecodeArray::kHeaderSize + kHeapObjectTag;
|
| }
|
|
|
| void InterpretedFrame::PatchBytecodeOffset(int new_offset) {
|
| const int index = InterpreterFrameConstants::kBytecodeOffsetExpressionIndex;
|
| - DCHECK_EQ(InterpreterFrameConstants::kBytecodeOffsetFromFp,
|
| - StandardFrameConstants::kExpressionsOffset - index * kPointerSize);
|
| + DCHECK_EQ(
|
| + InterpreterFrameConstants::kBytecodeOffsetFromFp,
|
| + InterpreterFrameConstants::kExpressionsOffset - index * kPointerSize);
|
| int raw_offset = new_offset + BytecodeArray::kHeaderSize - kHeapObjectTag;
|
| SetExpression(index, Smi::FromInt(raw_offset));
|
| }
|
|
|
| Object* InterpretedFrame::GetBytecodeArray() const {
|
| const int index = InterpreterFrameConstants::kBytecodeArrayExpressionIndex;
|
| - DCHECK_EQ(InterpreterFrameConstants::kBytecodeArrayFromFp,
|
| - StandardFrameConstants::kExpressionsOffset - index * kPointerSize);
|
| + DCHECK_EQ(
|
| + InterpreterFrameConstants::kBytecodeArrayFromFp,
|
| + InterpreterFrameConstants::kExpressionsOffset - index * kPointerSize);
|
| return GetExpression(index);
|
| }
|
|
|
| void InterpretedFrame::PatchBytecodeArray(Object* bytecode_array) {
|
| const int index = InterpreterFrameConstants::kBytecodeArrayExpressionIndex;
|
| - DCHECK_EQ(InterpreterFrameConstants::kBytecodeArrayFromFp,
|
| - StandardFrameConstants::kExpressionsOffset - index * kPointerSize);
|
| + DCHECK_EQ(
|
| + InterpreterFrameConstants::kBytecodeArrayFromFp,
|
| + InterpreterFrameConstants::kExpressionsOffset - index * kPointerSize);
|
| SetExpression(index, bytecode_array);
|
| }
|
|
|
| Object* InterpretedFrame::GetInterpreterRegister(int register_index) const {
|
| const int index = InterpreterFrameConstants::kRegisterFileExpressionIndex;
|
| - DCHECK_EQ(InterpreterFrameConstants::kRegisterFilePointerFromFp,
|
| - StandardFrameConstants::kExpressionsOffset - index * kPointerSize);
|
| + DCHECK_EQ(
|
| + InterpreterFrameConstants::kRegisterFilePointerFromFp,
|
| + InterpreterFrameConstants::kExpressionsOffset - index * kPointerSize);
|
| return GetExpression(index + register_index);
|
| }
|
|
|
| @@ -1191,19 +1185,21 @@ Address ArgumentsAdaptorFrame::GetCallerStackPointer() const {
|
| return fp() + StandardFrameConstants::kCallerSPOffset;
|
| }
|
|
|
| -
|
| -Address InternalFrame::GetCallerStackPointer() const {
|
| - // Internal frames have no arguments. The stack pointer of the
|
| - // caller is at a fixed offset from the frame pointer.
|
| - return fp() + StandardFrameConstants::kCallerSPOffset;
|
| +int ArgumentsAdaptorFrame::GetLength(Address fp) {
|
| + const int offset = ArgumentsAdaptorFrameConstants::kLengthOffset;
|
| + return Smi::cast(Memory::Object_at(fp + offset))->value();
|
| }
|
|
|
| -
|
| Code* ArgumentsAdaptorFrame::unchecked_code() const {
|
| return isolate()->builtins()->builtin(
|
| Builtins::kArgumentsAdaptorTrampoline);
|
| }
|
|
|
| +Address InternalFrame::GetCallerStackPointer() const {
|
| + // Internal frames have no arguments. The stack pointer of the
|
| + // caller is at a fixed offset from the frame pointer.
|
| + return fp() + StandardFrameConstants::kCallerSPOffset;
|
| +}
|
|
|
| Code* InternalFrame::unchecked_code() const {
|
| const int offset = InternalFrameConstants::kCodeOffset;
|
|
|