Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index aaa03203ae444987ec954edb1d4e19012e0791c5..070779df209cb5df432527a689bb9ec40c597ff4 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -2635,7 +2635,7 @@ Handle<Map> Map::GeneralizeRepresentation(Handle<Map> old_map, |
// Add missing transitions. |
Handle<Map> new_map = split_map; |
for (; descriptor < descriptors; descriptor++) { |
- new_map = Map::CopyInstallDescriptors(new_map, descriptor, new_descriptors); |
+ new_map = CopyInstallDescriptors(new_map, descriptor, new_descriptors); |
} |
new_map->set_owns_descriptors(true); |
@@ -6794,7 +6794,7 @@ Handle<Map> Map::CopyNormalized(Handle<Map> map, |
new_instance_size -= map->inobject_properties() * kPointerSize; |
} |
- Handle<Map> result = Map::RawCopy(map, new_instance_size); |
+ Handle<Map> result = RawCopy(map, new_instance_size); |
if (mode != CLEAR_INOBJECT_PROPERTIES) { |
result->set_inobject_properties(map->inobject_properties()); |
@@ -6839,7 +6839,7 @@ Handle<Map> Map::ShareDescriptor(Handle<Map> map, |
ASSERT(map->NumberOfOwnDescriptors() == |
map->instance_descriptors()->number_of_descriptors()); |
- Handle<Map> result = Map::CopyDropDescriptors(map); |
+ Handle<Map> result = CopyDropDescriptors(map); |
Handle<Name> name = descriptor->GetKey(); |
Handle<TransitionArray> transitions = |
TransitionArray::CopyInsert(map, name, result, SIMPLE_TRANSITION); |
@@ -6850,7 +6850,7 @@ Handle<Map> Map::ShareDescriptor(Handle<Map> map, |
if (old_size == 0) { |
descriptors = DescriptorArray::Allocate(map->GetIsolate(), 0, 1); |
} else { |
- Map::EnsureDescriptorSlack(map, old_size < 4 ? 1 : old_size / 2); |
+ EnsureDescriptorSlack(map, old_size < 4 ? 1 : old_size / 2); |
descriptors = handle(map->instance_descriptors()); |
} |
} |
@@ -6875,7 +6875,7 @@ Handle<Map> Map::CopyReplaceDescriptors(Handle<Map> map, |
Handle<DescriptorArray> descriptors, |
TransitionFlag flag, |
SimpleTransitionFlag simple_flag) { |
- return Map::CopyReplaceDescriptors( |
+ return CopyReplaceDescriptors( |
map, descriptors, flag, Handle<Name>::null(), simple_flag); |
} |
@@ -6910,7 +6910,7 @@ Handle<Map> Map::CopyInstallDescriptors(Handle<Map> map, |
Handle<DescriptorArray> descriptors) { |
ASSERT(descriptors->IsSortedNoDuplicates()); |
- Handle<Map> result = Map::CopyDropDescriptors(map); |
+ Handle<Map> result = CopyDropDescriptors(map); |
result->InitializeDescriptors(*descriptors); |
result->SetNumberOfOwnDescriptors(new_descriptor + 1); |
@@ -6958,7 +6958,7 @@ Handle<Map> Map::CopyAsElementsKind(Handle<Map> map, ElementsKind kind, |
if (insert_transition && map->owns_descriptors()) { |
// In case the map owned its own descriptors, share the descriptors and |
// transfer ownership to the new map. |
- Handle<Map> new_map = Map::CopyDropDescriptors(map); |
+ Handle<Map> new_map = CopyDropDescriptors(map); |
SetElementsTransitionMap(map, new_map); |
@@ -6972,7 +6972,7 @@ Handle<Map> Map::CopyAsElementsKind(Handle<Map> map, ElementsKind kind, |
// In case the map did not own its own descriptors, a split is forced by |
// copying the map; creating a new descriptor array cell. |
// Create a new free-floating map only if we are not allowed to store it. |
- Handle<Map> new_map = Map::Copy(map); |
+ Handle<Map> new_map = Copy(map); |
new_map->set_elements_kind(kind); |
@@ -6994,9 +6994,9 @@ Handle<Map> Map::CopyForObserved(Handle<Map> map) { |
// transfer ownership to the new map. |
Handle<Map> new_map; |
if (map->owns_descriptors()) { |
- new_map = Map::CopyDropDescriptors(map); |
+ new_map = CopyDropDescriptors(map); |
} else { |
- new_map = Map::Copy(map); |
+ new_map = Copy(map); |
} |
Handle<TransitionArray> transitions = TransitionArray::CopyInsert( |
@@ -7021,7 +7021,7 @@ Handle<Map> Map::Copy(Handle<Map> map) { |
int number_of_own_descriptors = map->NumberOfOwnDescriptors(); |
Handle<DescriptorArray> new_descriptors = |
DescriptorArray::CopyUpTo(descriptors, number_of_own_descriptors); |
- return Map::CopyReplaceDescriptors(map, new_descriptors, OMIT_TRANSITION); |
+ return CopyReplaceDescriptors(map, new_descriptors, OMIT_TRANSITION); |
} |
@@ -7065,14 +7065,14 @@ Handle<Map> Map::CopyAddDescriptor(Handle<Map> map, |
if (flag == INSERT_TRANSITION && |
map->owns_descriptors() && |
map->CanHaveMoreTransitions()) { |
- return Map::ShareDescriptor(map, descriptors, descriptor); |
+ return ShareDescriptor(map, descriptors, descriptor); |
} |
Handle<DescriptorArray> new_descriptors = DescriptorArray::CopyUpTo( |
descriptors, map->NumberOfOwnDescriptors(), 1); |
new_descriptors->Append(descriptor); |
- return Map::CopyReplaceDescriptors( |
+ return CopyReplaceDescriptors( |
map, new_descriptors, flag, descriptor->GetKey(), SIMPLE_TRANSITION); |
} |
@@ -7088,10 +7088,9 @@ Handle<Map> Map::CopyInsertDescriptor(Handle<Map> map, |
// We replace the key if it is already present. |
int index = old_descriptors->SearchWithCache(*descriptor->GetKey(), *map); |
if (index != DescriptorArray::kNotFound) { |
- return Map::CopyReplaceDescriptor( |
- map, old_descriptors, descriptor, index, flag); |
+ return CopyReplaceDescriptor(map, old_descriptors, descriptor, index, flag); |
} |
- return Map::CopyAddDescriptor(map, descriptor, flag); |
+ return CopyAddDescriptor(map, descriptor, flag); |
} |
@@ -7167,8 +7166,7 @@ Handle<Map> Map::CopyReplaceDescriptor(Handle<Map> map, |
(insertion_index == descriptors->number_of_descriptors() - 1) |
? SIMPLE_TRANSITION |
: FULL_TRANSITION; |
- return Map::CopyReplaceDescriptors( |
- map, new_descriptors, flag, key, simple_flag); |
+ return CopyReplaceDescriptors(map, new_descriptors, flag, key, simple_flag); |
} |
@@ -11533,7 +11531,7 @@ Handle<Map> Map::PutPrototypeTransition(Handle<Map> map, |
Factory* factory = map->GetIsolate()->factory(); |
cache = factory->CopySizeFixedArray(cache, transitions * 2 * step + header); |
- Map::SetPrototypeTransitions(map, cache); |
+ SetPrototypeTransitions(map, cache); |
} |
// Reload number of transitions as GC might shrink them. |
@@ -11813,6 +11811,18 @@ void DependentCode::AddToDependentICList(Handle<Code> stub) { |
} |
+Handle<Map> Map::TransitionToPrototype(Handle<Map> map, |
+ Handle<Object> prototype) { |
+ Handle<Map> new_map = GetPrototypeTransition(map, prototype); |
+ if (new_map.is_null()) { |
+ new_map = Copy(map); |
+ PutPrototypeTransition(map, prototype, new_map); |
+ new_map->set_prototype(*prototype); |
+ } |
+ return new_map; |
+} |
+ |
+ |
Handle<Object> JSObject::SetPrototype(Handle<JSObject> object, |
Handle<Object> value, |
bool skip_hidden_prototypes) { |
@@ -11883,12 +11893,7 @@ Handle<Object> JSObject::SetPrototype(Handle<JSObject> object, |
JSObject::OptimizeAsPrototype(Handle<JSObject>::cast(value)); |
} |
- Handle<Map> new_map = Map::GetPrototypeTransition(map, value); |
- if (new_map.is_null()) { |
- new_map = Map::Copy(map); |
- Map::PutPrototypeTransition(map, value, new_map); |
- new_map->set_prototype(*value); |
- } |
+ Handle<Map> new_map = Map::TransitionToPrototype(map, value); |
ASSERT(new_map->prototype() == *value); |
JSObject::MigrateToMap(real_receiver, new_map); |