Index: src/objects.cc |
=================================================================== |
--- src/objects.cc (revision 500) |
+++ src/objects.cc (working copy) |
@@ -366,7 +366,7 @@ |
ASSERT(!value->IsTheHole() || result->IsReadOnly()); |
return value->IsTheHole() ? Heap::undefined_value() : value; |
case FIELD: |
- value = holder->properties()->get(result->GetFieldIndex()); |
+ value = holder->FastPropertyAt(result->GetFieldIndex()); |
ASSERT(!value->IsTheHole() || result->IsReadOnly()); |
return value->IsTheHole() ? Heap::undefined_value() : value; |
case CONSTANT_FUNCTION: |
@@ -936,20 +936,16 @@ |
String* name, |
Object* value) { |
int index = new_map->PropertyIndexFor(name); |
- if (map()->unused_property_fields() > 0) { |
- ASSERT(index < properties()->length()); |
- properties()->set(index, value); |
- } else { |
+ if (map()->unused_property_fields() == 0) { |
ASSERT(map()->unused_property_fields() == 0); |
int new_unused = new_map->unused_property_fields(); |
Object* values = |
properties()->CopySize(properties()->length() + new_unused + 1); |
if (values->IsFailure()) return values; |
- FixedArray::cast(values)->set(index, value); |
set_properties(FixedArray::cast(values)); |
} |
set_map(new_map); |
- return value; |
+ return FastPropertyAtPut(index, value); |
} |
@@ -980,7 +976,8 @@ |
!old_descriptors->Contains(name) && |
(Top::context()->global_context()->object_function()->map() != map()); |
- ASSERT(index < properties()->length() || |
+ ASSERT(index < map()->inobject_properties() || |
+ (index - map()->inobject_properties()) < properties()->length() || |
map()->unused_property_fields() == 0); |
// Allocate a new map for the object. |
Object* r = map()->Copy(); |
@@ -994,7 +991,6 @@ |
old_descriptors = DescriptorArray::cast(r); |
} |
- |
if (map()->unused_property_fields() == 0) { |
if (properties()->length() > kMaxFastProperties) { |
Object* obj = NormalizeProperties(); |
@@ -1015,9 +1011,7 @@ |
map()->set_instance_descriptors(old_descriptors); |
new_map->set_instance_descriptors(DescriptorArray::cast(new_descriptors)); |
set_map(new_map); |
- properties()->set(index, value); |
- |
- return value; |
+ return FastPropertyAtPut(index, value); |
} |
@@ -1211,8 +1205,7 @@ |
if (new_properties) { |
set_properties(FixedArray::cast(new_properties)); |
} |
- properties()->set(index, new_value); |
- return new_value; |
+ return FastPropertyAtPut(index, new_value); |
} |
@@ -1377,7 +1370,7 @@ |
// Disallow caching for uninitialized constants. These can only |
// occur as fields. |
if (result->IsReadOnly() && result->type() == FIELD && |
- properties()->get(result->GetFieldIndex())->IsTheHole()) { |
+ FastPropertyAt(result->GetFieldIndex())->IsTheHole()) { |
result->DisallowCaching(); |
} |
return; |
@@ -1514,8 +1507,7 @@ |
property_dictionary()->ValueAtPut(result->GetDictionaryEntry(), value); |
return value; |
case FIELD: |
- properties()->set(result->GetFieldIndex(), value); |
- return value; |
+ return FastPropertyAtPut(result->GetFieldIndex(), value); |
case MAP_TRANSITION: |
if (attributes == result->GetAttributes()) { |
// Only use map transition if the attributes match. |
@@ -1585,8 +1577,7 @@ |
property_dictionary()->ValueAtPut(result->GetDictionaryEntry(), value); |
return value; |
case FIELD: |
- properties()->set(result->GetFieldIndex(), value); |
- return value; |
+ return FastPropertyAtPut(result->GetFieldIndex(), value); |
case MAP_TRANSITION: |
if (attributes == result->GetAttributes()) { |
// Only use map transition if the attributes match. |
@@ -1780,7 +1771,7 @@ |
case FIELD: { |
PropertyDetails d = |
PropertyDetails(details.attributes(), NORMAL, details.index()); |
- Object* value = properties()->get(r.GetFieldIndex()); |
+ Object* value = FastPropertyAt(r.GetFieldIndex()); |
Object* result = dictionary->AddStringEntry(r.GetKey(), value, d); |
if (result->IsFailure()) return result; |
dictionary = Dictionary::cast(result); |
@@ -2335,7 +2326,7 @@ |
!r.eos(); |
r.advance()) { |
if (r.type() == FIELD) { |
- if (properties()->get(r.GetFieldIndex()) == value) { |
+ if (FastPropertyAt(r.GetFieldIndex()) == value) { |
return r.GetKey(); |
} |
} else if (r.type() == CONSTANT_FUNCTION) { |
@@ -2359,6 +2350,7 @@ |
// Don't copy descriptors, so map transitions always remain a forest. |
Map::cast(result)->set_instance_descriptors(Heap::empty_descriptor_array()); |
// Please note instance_type and instance_size are set when allocated. |
+ Map::cast(result)->set_inobject_properties(inobject_properties()); |
Map::cast(result)->set_unused_property_fields(unused_property_fields()); |
Map::cast(result)->set_bit_field(bit_field()); |
Map::cast(result)->ClearCodeCache(); |