Index: src/objects-inl.h |
diff --git a/src/objects-inl.h b/src/objects-inl.h |
index 9d1923c94e7b42bc9b6999052bc81704266ff1c8..2b5d18f53271d22abe96c6efab151bd55211de34 100644 |
--- a/src/objects-inl.h |
+++ b/src/objects-inl.h |
@@ -2974,7 +2974,7 @@ MaybeObject* Map::GetFastElementsMap() { |
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 @@ MaybeObject* Map::GetSlowElementsMap() { |
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 @@ void JSRegExp::SetDataAt(int index, Object* value) { |
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; |
} |