| Index: src/objects-inl.h
|
| diff --git a/src/objects-inl.h b/src/objects-inl.h
|
| index 16d0acd6e3caf045cb3bc470b71f7b3b841b18fa..d600b4ec25103c250d527f6914fc91895f380543 100644
|
| --- a/src/objects-inl.h
|
| +++ b/src/objects-inl.h
|
| @@ -165,6 +165,7 @@ bool Object::IsHeapObject() const {
|
|
|
|
|
| TYPE_CHECKER(HeapNumber, HEAP_NUMBER_TYPE)
|
| +TYPE_CHECKER(MutableHeapNumber, MUTABLE_HEAP_NUMBER_TYPE)
|
| TYPE_CHECKER(Symbol, SYMBOL_TYPE)
|
|
|
|
|
| @@ -277,10 +278,27 @@ Handle<Object> Object::NewStorageFor(Isolate* isolate,
|
| return handle(Smi::FromInt(0), isolate);
|
| }
|
| if (!representation.IsDouble()) return object;
|
| + double value;
|
| if (object->IsUninitialized()) {
|
| - return isolate->factory()->NewHeapNumber(0);
|
| + value = 0;
|
| + } else if (object->IsMutableHeapNumber()) {
|
| + value = HeapNumber::cast(*object)->value();
|
| + } else {
|
| + value = object->Number();
|
| + }
|
| + return isolate->factory()->NewHeapNumber(value, MUTABLE);
|
| +}
|
| +
|
| +
|
| +Handle<Object> Object::WrapForRead(Isolate* isolate,
|
| + Handle<Object> object,
|
| + Representation representation) {
|
| + ASSERT(!object->IsUninitialized());
|
| + if (!representation.IsDouble()) {
|
| + ASSERT(object->FitsRepresentation(representation));
|
| + return object;
|
| }
|
| - return isolate->factory()->NewHeapNumber(object->Number());
|
| + return isolate->factory()->NewHeapNumber(HeapNumber::cast(*object)->value());
|
| }
|
|
|
|
|
| @@ -3079,7 +3097,6 @@ CAST_ACCESSOR(FixedTypedArrayBase)
|
| CAST_ACCESSOR(Foreign)
|
| CAST_ACCESSOR(FreeSpace)
|
| CAST_ACCESSOR(GlobalObject)
|
| -CAST_ACCESSOR(HeapNumber)
|
| CAST_ACCESSOR(HeapObject)
|
| CAST_ACCESSOR(JSArray)
|
| CAST_ACCESSOR(JSArrayBuffer)
|
| @@ -5944,6 +5961,18 @@ ACCESSORS(JSModule, scope_info, ScopeInfo, kScopeInfoOffset)
|
| ACCESSORS(JSValue, value, Object, kValueOffset)
|
|
|
|
|
| +HeapNumber* HeapNumber::cast(Object* object) {
|
| + SLOW_ASSERT(object->IsHeapNumber() || object->IsMutableHeapNumber());
|
| + return reinterpret_cast<HeapNumber*>(object);
|
| +}
|
| +
|
| +
|
| +const HeapNumber* HeapNumber::cast(const Object* object) {
|
| + SLOW_ASSERT(object->IsHeapNumber() || object->IsMutableHeapNumber());
|
| + return reinterpret_cast<const HeapNumber*>(object);
|
| +}
|
| +
|
| +
|
| ACCESSORS(JSDate, value, Object, kValueOffset)
|
| ACCESSORS(JSDate, cache_stamp, Object, kCacheStampOffset)
|
| ACCESSORS(JSDate, year, Object, kYearOffset)
|
|
|