Chromium Code Reviews| Index: src/objects-inl.h |
| diff --git a/src/objects-inl.h b/src/objects-inl.h |
| index c358ee6584525e4415aacce8615efd687acda79e..7d42845900a405a770fe03c755dc323652609a84 100644 |
| --- a/src/objects-inl.h |
| +++ b/src/objects-inl.h |
| @@ -177,6 +177,7 @@ bool Object::NonFailureIsHeapObject() { |
| TYPE_CHECKER(HeapNumber, HEAP_NUMBER_TYPE) |
| +TYPE_CHECKER(MutableHeapNumber, MUTABLE_HEAP_NUMBER_TYPE) |
| TYPE_CHECKER(Symbol, SYMBOL_TYPE) |
| @@ -282,10 +283,26 @@ MaybeObject* Object::AllocateNewStorageFor(Heap* heap, |
| return Smi::FromInt(0); |
| } |
| if (!representation.IsDouble()) return this; |
| + double value; |
| if (IsUninitialized()) { |
| - return heap->AllocateHeapNumber(0); |
| + value = 0; |
| + } else if (IsMutableHeapNumber()) { |
|
Igor Sheludko
2014/03/27 11:30:16
If you extend IsNumber() to return true for mutabl
|
| + value = HeapNumber::cast(this)->value(); |
| + } else { |
| + value = Number(); |
| } |
| - return heap->AllocateHeapNumber(Number()); |
| + return heap->AllocateMutableHeapNumber(value); |
| +} |
| + |
| + |
| +MaybeObject* Object::WrapForRead(Heap* heap, |
| + Representation representation) { |
| + ASSERT(!IsUninitialized()); |
| + if (!representation.IsDouble()) { |
| + ASSERT(FitsRepresentation(representation)); |
| + return this; |
| + } |
| + return heap->AllocateHeapNumber(HeapNumber::cast(this)->value()); |
|
Igor Sheludko
2014/03/27 11:30:16
Same here: use Number().
|
| } |
| @@ -1944,7 +1961,7 @@ void JSObject::SetInternalField(int index, Smi* value) { |
| MaybeObject* JSObject::FastPropertyAt(Representation representation, |
| int index) { |
| Object* raw_value = RawFastPropertyAt(index); |
| - return raw_value->AllocateNewStorageFor(GetHeap(), representation); |
| + return raw_value->WrapForRead(GetHeap(), representation); |
|
Igor Sheludko
2014/03/27 11:30:16
Shouldn't we also repack mutable heap number to im
|
| } |
| @@ -2852,7 +2869,6 @@ CAST_ACCESSOR(JSReceiver) |
| CAST_ACCESSOR(JSObject) |
| CAST_ACCESSOR(Smi) |
| CAST_ACCESSOR(HeapObject) |
| -CAST_ACCESSOR(HeapNumber) |
| CAST_ACCESSOR(Oddball) |
| CAST_ACCESSOR(Cell) |
| CAST_ACCESSOR(PropertyCell) |
| @@ -5673,6 +5689,12 @@ JSValue* JSValue::cast(Object* obj) { |
| } |
| +HeapNumber* HeapNumber::cast(Object* object) { |
| + SLOW_ASSERT(object->IsHeapNumber() || object->IsMutableHeapNumber()); |
| + return reinterpret_cast<HeapNumber*>(object); |
| +} |
| + |
| + |
| ACCESSORS(JSDate, value, Object, kValueOffset) |
| ACCESSORS(JSDate, cache_stamp, Object, kCacheStampOffset) |
| ACCESSORS(JSDate, year, Object, kYearOffset) |