| Index: src/frames.cc
|
| diff --git a/src/frames.cc b/src/frames.cc
|
| index 61fab874d6148bcbc7e3d711948e172c91cf13d4..e3584476b675f7c56fe9ae90c199186e68adcb85 100644
|
| --- a/src/frames.cc
|
| +++ b/src/frames.cc
|
| @@ -1534,17 +1534,16 @@ void StackHandler::Unwind(Isolate* isolate,
|
| FixedArray* array,
|
| int offset,
|
| int previous_handler_offset) const {
|
| - STATIC_ASSERT(StackHandlerConstants::kSlotCount >= 4);
|
| + STATIC_ASSERT(StackHandlerConstants::kSlotCount >= 3);
|
| DCHECK_LE(0, offset);
|
| DCHECK_GE(array->length(), offset + StackHandlerConstants::kSlotCount);
|
| // Unwinding a stack handler into an array chains it in the opposite
|
| // direction, re-using the "next" slot as a "previous" link, so that stack
|
| - // handlers can be later re-wound in the correct order. Decode the "state"
|
| - // slot into "index" and "kind" and store them separately, using the fp slot.
|
| - array->set(offset, Smi::FromInt(previous_handler_offset)); // next
|
| - array->set(offset + 1, Smi::FromInt(static_cast<int>(index()))); // state
|
| - array->set(offset + 2, *context_address()); // context
|
| - array->set(offset + 3, Smi::FromInt(static_cast<int>(kind()))); // fp
|
| + // handlers can be later re-wound in the correct order.
|
| + int s = Memory::int_at(address() + StackHandlerConstants::kStateIntOffset);
|
| + array->set(offset, Smi::FromInt(previous_handler_offset)); // next
|
| + array->set(offset + 1, Smi::FromInt(static_cast<int>(s))); // state
|
| + array->set(offset + 2, *context_address()); // context
|
|
|
| *isolate->handler_address() = next()->address();
|
| }
|
| @@ -1554,23 +1553,19 @@ int StackHandler::Rewind(Isolate* isolate,
|
| FixedArray* array,
|
| int offset,
|
| Address fp) {
|
| - STATIC_ASSERT(StackHandlerConstants::kSlotCount >= 4);
|
| + STATIC_ASSERT(StackHandlerConstants::kSlotCount >= 3);
|
| DCHECK_LE(0, offset);
|
| DCHECK_GE(array->length(), offset + StackHandlerConstants::kSlotCount);
|
| Smi* prev_handler_offset = Smi::cast(array->get(offset));
|
| - Smi* smi_index = Smi::cast(array->get(offset + 1));
|
| + Smi* smi_state = Smi::cast(array->get(offset + 1));
|
| Object* context = array->get(offset + 2);
|
| - Smi* smi_kind = Smi::cast(array->get(offset + 3));
|
| -
|
| - unsigned state = KindField::encode(static_cast<Kind>(smi_kind->value())) |
|
| - IndexField::encode(static_cast<unsigned>(smi_index->value()));
|
|
|
| Memory::Address_at(address() + StackHandlerConstants::kNextOffset) =
|
| *isolate->handler_address();
|
| - Memory::uintptr_at(address() + StackHandlerConstants::kStateOffset) = state;
|
| + Memory::int_at(address() + StackHandlerConstants::kStateIntOffset) =
|
| + smi_state->value();
|
| Memory::Object_at(address() + StackHandlerConstants::kContextOffset) =
|
| context;
|
| - SetFp(address() + StackHandlerConstants::kFPOffset, fp);
|
|
|
| *isolate->handler_address() = address();
|
|
|
|
|