Index: src/objects-inl.h |
=================================================================== |
--- src/objects-inl.h (revision 8174) |
+++ src/objects-inl.h (working copy) |
@@ -2961,7 +2961,7 @@ |
void Map::set_prototype(Object* value, WriteBarrierMode mode) { |
- ASSERT(value->IsNull() || value->IsJSObject()); |
+ ASSERT(value->IsNull() || value->IsJSReceiver()); |
WRITE_FIELD(this, kPrototypeOffset, value); |
CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kPrototypeOffset, mode); |
} |
@@ -2974,7 +2974,7 @@ |
if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
} |
Map* new_map = Map::cast(obj); |
- new_map->set_has_fast_elements(true); |
+ new_map->set_elements_kind(JSObject::FAST_ELEMENTS); |
isolate()->counters()->map_slow_to_fast_elements()->Increment(); |
return new_map; |
} |
@@ -2987,7 +2987,7 @@ |
if (!maybe_obj->ToObject(&obj)) return maybe_obj; |
} |
Map* new_map = Map::cast(obj); |
- new_map->set_has_fast_elements(false); |
+ new_map->set_elements_kind(JSObject::DICTIONARY_ELEMENTS); |
isolate()->counters()->map_fast_to_slow_elements()->Increment(); |
return new_map; |
} |
@@ -3776,45 +3776,15 @@ |
JSObject::ElementsKind JSObject::GetElementsKind() { |
- if (map()->has_fast_elements()) { |
- ASSERT(elements()->map() == GetHeap()->fixed_array_map() || |
- elements()->map() == GetHeap()->fixed_cow_array_map()); |
- return FAST_ELEMENTS; |
- } |
- HeapObject* array = elements(); |
- if (array->IsFixedArray()) { |
- // FAST_ELEMENTS or DICTIONARY_ELEMENTS are both stored in a |
- // FixedArray, but FAST_ELEMENTS is already handled above. |
- ASSERT(array->IsDictionary()); |
- return DICTIONARY_ELEMENTS; |
- } |
- ASSERT(!map()->has_fast_elements()); |
- if (array->IsExternalArray()) { |
- switch (array->map()->instance_type()) { |
- case EXTERNAL_BYTE_ARRAY_TYPE: |
- return EXTERNAL_BYTE_ELEMENTS; |
- case EXTERNAL_UNSIGNED_BYTE_ARRAY_TYPE: |
- return EXTERNAL_UNSIGNED_BYTE_ELEMENTS; |
- case EXTERNAL_SHORT_ARRAY_TYPE: |
- return EXTERNAL_SHORT_ELEMENTS; |
- case EXTERNAL_UNSIGNED_SHORT_ARRAY_TYPE: |
- return EXTERNAL_UNSIGNED_SHORT_ELEMENTS; |
- case EXTERNAL_INT_ARRAY_TYPE: |
- return EXTERNAL_INT_ELEMENTS; |
- case EXTERNAL_UNSIGNED_INT_ARRAY_TYPE: |
- return EXTERNAL_UNSIGNED_INT_ELEMENTS; |
- case EXTERNAL_FLOAT_ARRAY_TYPE: |
- return EXTERNAL_FLOAT_ELEMENTS; |
- case EXTERNAL_DOUBLE_ARRAY_TYPE: |
- return EXTERNAL_DOUBLE_ELEMENTS; |
- case EXTERNAL_PIXEL_ARRAY_TYPE: |
- return EXTERNAL_PIXEL_ELEMENTS; |
- default: |
- break; |
- } |
- } |
- UNREACHABLE(); |
- return DICTIONARY_ELEMENTS; |
+ ElementsKind kind = map()->elements_kind(); |
+ ASSERT((kind == FAST_ELEMENTS && |
+ (elements()->map() == GetHeap()->fixed_array_map() || |
+ elements()->map() == GetHeap()->fixed_cow_array_map())) || |
+ (kind == DICTIONARY_ELEMENTS && |
+ elements()->IsFixedArray() && |
+ elements()->IsDictionary()) || |
+ (kind > DICTIONARY_ELEMENTS)); |
+ return kind; |
} |