| Index: src/json-parser.h | 
| diff --git a/src/json-parser.h b/src/json-parser.h | 
| index a7dbd3ab8651d2cb9995bb994a7c1c158e4c6e7f..8c19bc847454751413cd0dfc539f6cfe991d675f 100644 | 
| --- a/src/json-parser.h | 
| +++ b/src/json-parser.h | 
| @@ -415,7 +415,15 @@ Handle<Object> JsonParser<seq_ascii>::ParseJsonObject() { | 
| 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)) { | 
| +              Handle<HeapType> value_type(value->OptimalType( | 
| +                      isolate(), expected_representation)); | 
| +              Map::GeneralizeFieldType(target, descriptor, value_type); | 
| } | 
| +            ASSERT(target->instance_descriptors()->GetFieldType( | 
| +                    descriptor)->NowContains(value)); | 
| properties.Add(value, zone()); | 
| map = target; | 
| continue; | 
|  |