Index: src/objects-inl.h |
diff --git a/src/objects-inl.h b/src/objects-inl.h |
index 2cdfad6fb2c1b4f7d2bf4c024781aac82dedb31c..abb2060bc72229f2c6b72b849186490bff5a91dc 100644 |
--- a/src/objects-inl.h |
+++ b/src/objects-inl.h |
@@ -1863,7 +1863,7 @@ void FixedArray::set_unchecked(Heap* heap, |
void FixedArray::set_null_unchecked(Heap* heap, int index) { |
ASSERT(index >= 0 && index < this->length()); |
- ASSERT(!HEAP->InNewSpace(heap->null_value())); |
+ ASSERT(!heap->InNewSpace(heap->null_value())); |
WRITE_FIELD(this, kHeaderSize + index * kPointerSize, heap->null_value()); |
} |
@@ -1976,6 +1976,17 @@ String* DescriptorArray::GetKey(int descriptor_number) { |
} |
+void DescriptorArray::SetKeyUnchecked(Heap* heap, |
+ int descriptor_number, |
+ String* key) { |
+ ASSERT(descriptor_number < number_of_descriptors()); |
+ set_unchecked(heap, |
+ ToKeyIndex(descriptor_number), |
+ key, |
+ UPDATE_WRITE_BARRIER); |
+} |
+ |
+ |
Object** DescriptorArray::GetValueSlot(int descriptor_number) { |
ASSERT(descriptor_number < number_of_descriptors()); |
return HeapObject::RawField( |
@@ -1990,12 +2001,24 @@ Object* DescriptorArray::GetValue(int descriptor_number) { |
} |
-void DescriptorArray::SetNullValueUnchecked(int descriptor_number, Heap* heap) { |
+void DescriptorArray::SetNullValueUnchecked(Heap* heap, int descriptor_number) { |
ASSERT(descriptor_number < number_of_descriptors()); |
set_null_unchecked(heap, ToValueIndex(descriptor_number)); |
} |
+ |
+void DescriptorArray::SetValueUnchecked(Heap* heap, |
+ int descriptor_number, |
+ Object* value) { |
+ ASSERT(descriptor_number < number_of_descriptors()); |
+ set_unchecked(heap, |
+ ToValueIndex(descriptor_number), |
+ value, |
+ UPDATE_WRITE_BARRIER); |
+} |
+ |
+ |
PropertyDetails DescriptorArray::GetDetails(int descriptor_number) { |
ASSERT(descriptor_number < number_of_descriptors()); |
Object* details = get(ToDetailsIndex(descriptor_number)); |
@@ -2059,19 +2082,16 @@ bool DescriptorArray::IsTransitionOnly(int descriptor_number) { |
case CONSTANT_FUNCTION: |
case HANDLER: |
case INTERCEPTOR: |
- case NULL_DESCRIPTOR: |
return false; |
+ case NONEXISTENT: |
+ UNREACHABLE(); |
+ break; |
} |
UNREACHABLE(); // Keep the compiler happy. |
return false; |
} |
-bool DescriptorArray::IsNullDescriptor(int descriptor_number) { |
- return GetType(descriptor_number) == NULL_DESCRIPTOR; |
-} |
- |
- |
void DescriptorArray::Get(int descriptor_number, Descriptor* desc) { |
desc->Init(GetKey(descriptor_number), |
GetValue(descriptor_number), |
@@ -3464,10 +3484,23 @@ int Map::bit_field3() { |
} |
+void Map::ClearDescriptorArray() { |
+ int bitfield3 = bit_field3(); |
+#ifdef DEBUG |
+ Object* object = READ_FIELD(this, kInstanceDescriptorsOrBitField3Offset); |
+ if (!object->IsSmi()) { |
+ ZapInstanceDescriptors(); |
+ } |
+#endif |
+ WRITE_FIELD(this, |
+ kInstanceDescriptorsOrBitField3Offset, |
+ Smi::FromInt(bitfield3)); |
+} |
+ |
+ |
void Map::set_bit_field3(int value) { |
ASSERT(Smi::IsValid(value)); |
- Object* object = READ_FIELD(this, |
- kInstanceDescriptorsOrBitField3Offset); |
+ Object* object = READ_FIELD(this, kInstanceDescriptorsOrBitField3Offset); |
if (object->IsSmi()) { |
WRITE_FIELD(this, |
kInstanceDescriptorsOrBitField3Offset, |