Index: src/objects-inl.h |
diff --git a/src/objects-inl.h b/src/objects-inl.h |
index 7c7f0940067ad7500c80d1ed416f38c818e7f192..99a0bb08d29be6f9a4f80cd244e623dea297f3c8 100644 |
--- a/src/objects-inl.h |
+++ b/src/objects-inl.h |
@@ -1219,7 +1219,7 @@ void JSObject::ValidateSmiOnlyElements() { |
map != heap->free_space_map()) { |
for (int i = 0; i < fixed_array->length(); i++) { |
Object* current = fixed_array->get(i); |
- ASSERT(current->IsSmi() || current == heap->the_hole_value()); |
+ ASSERT(current->IsSmi() || current->IsTheHole()); |
} |
} |
} |
@@ -1290,22 +1290,37 @@ MaybeObject* JSObject::EnsureCanContainElements(FixedArrayBase* elements, |
} |
-void JSObject::set_elements(FixedArrayBase* value, WriteBarrierMode mode) { |
+void JSObject::set_map_and_elements(Map* new_map, |
+ FixedArrayBase* value, |
+ WriteBarrierMode mode) { |
+ ASSERT(value->HasValidElements()); |
+#ifdef DEBUG |
+ ValidateSmiOnlyElements(); |
+#endif |
+ if (new_map != NULL) { |
+ if (mode == UPDATE_WRITE_BARRIER) { |
+ set_map(new_map); |
+ } else { |
+ ASSERT(mode == SKIP_WRITE_BARRIER); |
+ set_map_no_write_barrier(new_map); |
+ } |
+ } |
ASSERT((map()->has_fast_elements() || |
map()->has_fast_smi_only_elements()) == |
(value->map() == GetHeap()->fixed_array_map() || |
value->map() == GetHeap()->fixed_cow_array_map())); |
ASSERT(map()->has_fast_double_elements() == |
value->IsFixedDoubleArray()); |
- ASSERT(value->HasValidElements()); |
-#ifdef DEBUG |
- ValidateSmiOnlyElements(); |
-#endif |
WRITE_FIELD(this, kElementsOffset, value); |
CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kElementsOffset, value, mode); |
} |
+void JSObject::set_elements(FixedArrayBase* value, WriteBarrierMode mode) { |
+ set_map_and_elements(NULL, value, mode); |
+} |
+ |
+ |
void JSObject::initialize_properties() { |
ASSERT(!GetHeap()->InNewSpace(GetHeap()->empty_fixed_array())); |
WRITE_FIELD(this, kPropertiesOffset, GetHeap()->empty_fixed_array()); |