Handlify Map::CopyInstallDescriptors
BUG= R=mstarzinger@chromium.org Review URL: https://codereview.chromium.org/34603008 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17350 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
91fa96bf6b
commit
f719a45f18
@ -6837,31 +6837,21 @@ MaybeObject* Map::CopyReplaceDescriptors(DescriptorArray* descriptors,
|
||||
}
|
||||
|
||||
|
||||
// Since this method is used to rewrite an existing transition tree, it can
|
||||
// always insert transitions without checking.
|
||||
Handle<Map> Map::CopyInstallDescriptors(Handle<Map> map,
|
||||
int new_descriptor,
|
||||
Handle<DescriptorArray> descriptors) {
|
||||
CALL_HEAP_FUNCTION(map->GetIsolate(),
|
||||
map->CopyInstallDescriptors(new_descriptor, *descriptors),
|
||||
Map);
|
||||
}
|
||||
|
||||
|
||||
// Since this method is used to rewrite an existing transition tree, it can
|
||||
// always insert transitions without checking.
|
||||
MaybeObject* Map::CopyInstallDescriptors(int new_descriptor,
|
||||
DescriptorArray* descriptors) {
|
||||
ASSERT(descriptors->IsSortedNoDuplicates());
|
||||
|
||||
Map* result;
|
||||
MaybeObject* maybe_result = CopyDropDescriptors();
|
||||
if (!maybe_result->To(&result)) return maybe_result;
|
||||
Handle<Map> result = Map::CopyDropDescriptors(map);
|
||||
|
||||
result->InitializeDescriptors(descriptors);
|
||||
result->InitializeDescriptors(*descriptors);
|
||||
result->SetNumberOfOwnDescriptors(new_descriptor + 1);
|
||||
|
||||
int unused_property_fields = this->unused_property_fields();
|
||||
int unused_property_fields = map->unused_property_fields();
|
||||
if (descriptors->GetDetails(new_descriptor).type() == FIELD) {
|
||||
unused_property_fields = this->unused_property_fields() - 1;
|
||||
unused_property_fields = map->unused_property_fields() - 1;
|
||||
if (unused_property_fields < 0) {
|
||||
unused_property_fields += JSObject::kFieldsAdded;
|
||||
}
|
||||
@ -6870,14 +6860,12 @@ MaybeObject* Map::CopyInstallDescriptors(int new_descriptor,
|
||||
result->set_unused_property_fields(unused_property_fields);
|
||||
result->set_owns_descriptors(false);
|
||||
|
||||
Name* name = descriptors->GetKey(new_descriptor);
|
||||
TransitionArray* transitions;
|
||||
MaybeObject* maybe_transitions =
|
||||
AddTransition(name, result, SIMPLE_TRANSITION);
|
||||
if (!maybe_transitions->To(&transitions)) return maybe_transitions;
|
||||
Handle<Name> name = handle(descriptors->GetKey(new_descriptor));
|
||||
Handle<TransitionArray> transitions = Map::AddTransition(map, name, result,
|
||||
SIMPLE_TRANSITION);
|
||||
|
||||
set_transitions(transitions);
|
||||
result->SetBackPointer(this);
|
||||
map->set_transitions(*transitions);
|
||||
result->SetBackPointer(*map);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -5983,9 +5983,6 @@ class Map: public HeapObject {
|
||||
Handle<Map> map,
|
||||
int new_descriptor,
|
||||
Handle<DescriptorArray> descriptors);
|
||||
MUST_USE_RESULT MaybeObject* CopyInstallDescriptors(
|
||||
int new_descriptor,
|
||||
DescriptorArray* descriptors);
|
||||
MUST_USE_RESULT MaybeObject* ShareDescriptor(DescriptorArray* descriptors,
|
||||
Descriptor* descriptor);
|
||||
MUST_USE_RESULT MaybeObject* CopyAddDescriptor(Descriptor* descriptor,
|
||||
|
Loading…
Reference in New Issue
Block a user