Index: src/json-parser.h |
diff --git a/src/json-parser.h b/src/json-parser.h |
index cdbb50d6e88c3281b6a7fd83b1935f3c828cfe26..09320ab2bddfe3ae1ff84e35ce776ca00ea1f8fb 100644 |
--- a/src/json-parser.h |
+++ b/src/json-parser.h |
@@ -387,9 +387,11 @@ Handle<Object> JsonParser<seq_ascii>::ParseJsonObject() { |
Representation expected_representation = details.representation(); |
if (value->FitsRepresentation(expected_representation)) { |
- if (expected_representation.IsDouble()) { |
- value = Object::NewStorageFor(isolate(), value, |
- expected_representation); |
+ // If the target representation is double and the value is already |
+ // double, use the existing box. |
+ if (value->IsSmi() && expected_representation.IsDouble()) { |
+ value = factory()->NewHeapNumber( |
+ Handle<Smi>::cast(value)->value()); |
} else if (expected_representation.IsHeapObject() && |
!target->instance_descriptors()->GetFieldType( |
descriptor)->NowContains(value)) { |