| Index: src/deoptimizer.cc
|
| diff --git a/src/deoptimizer.cc b/src/deoptimizer.cc
|
| index 7c79c89078b98a74e8d65bfb766e2670a8850ba4..c98d391632d358cf35298f02633c0fd7d36e9e22 100644
|
| --- a/src/deoptimizer.cc
|
| +++ b/src/deoptimizer.cc
|
| @@ -3286,8 +3286,13 @@ SlotRefValueBuilder::SlotRefValueBuilder(JavaScriptFrame* frame,
|
|
|
| Handle<Object> SlotRef::GetValue(Isolate* isolate) {
|
| switch (representation_) {
|
| - case TAGGED:
|
| - return Handle<Object>(Memory::Object_at(addr_), isolate);
|
| + case TAGGED: {
|
| + Handle<Object> value(Memory::Object_at(addr_), isolate);
|
| + if (value->IsMutableHeapNumber()) {
|
| + HeapNumber::cast(*value)->set_map(isolate->heap()->heap_number_map());
|
| + }
|
| + return value;
|
| + }
|
|
|
| case INT32: {
|
| #if V8_TARGET_BIG_ENDIAN && V8_HOST_ARCH_64_BIT
|
| @@ -3388,9 +3393,9 @@ Handle<Object> SlotRefValueBuilder::GetNext(Isolate* isolate, int lvl) {
|
| case SlotRef::INT32:
|
| case SlotRef::UINT32:
|
| case SlotRef::DOUBLE:
|
| - case SlotRef::LITERAL: {
|
| + case SlotRef::LITERAL:
|
| return slot.GetValue(isolate);
|
| - }
|
| +
|
| case SlotRef::ARGUMENTS_OBJECT: {
|
| // We should never need to materialize an arguments object,
|
| // but we still need to put something into the array
|
|
|