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 |