From 9da828a5a5c3c9eaf9808a1c6415fce2d7bdb90e Mon Sep 17 00:00:00 2001 From: "verwaest@chromium.org" Date: Wed, 16 Apr 2014 11:25:29 +0000 Subject: [PATCH] Move CopyReplaceDescriptors to private BUG= R=ishell@chromium.org Review URL: https://codereview.chromium.org/239203002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20793 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/objects.cc | 41 ++++++++++++++++++++--------------------- src/objects.h | 19 ++++++++----------- 2 files changed, 28 insertions(+), 32 deletions(-) diff --git a/src/objects.cc b/src/objects.cc index a603bac..704e267 100644 --- a/src/objects.cc +++ b/src/objects.cc @@ -5756,16 +5756,7 @@ MaybeHandle JSObject::Freeze(Handle object) { JSObject::MigrateToMap(object, transition_map); } else if (object->HasFastProperties() && old_map->CanHaveMoreTransitions()) { // Create a new descriptor array with fully-frozen properties - int num_descriptors = old_map->NumberOfOwnDescriptors(); - Handle new_descriptors = - DescriptorArray::CopyUpToAddAttributes( - handle(old_map->instance_descriptors()), num_descriptors, FROZEN); - Handle new_map = Map::CopyReplaceDescriptors( - old_map, new_descriptors, INSERT_TRANSITION, - isolate->factory()->frozen_symbol()); - new_map->freeze(); - new_map->set_is_extensible(false); - new_map->set_elements_kind(DICTIONARY_ELEMENTS); + Handle new_map = Map::CopyForFreeze(old_map); JSObject::MigrateToMap(object, new_map); } else { // Slow path: need to normalize properties for safety @@ -6967,16 +6958,7 @@ Handle Map::ShareDescriptor(Handle map, Handle Map::CopyReplaceDescriptors(Handle map, Handle descriptors, TransitionFlag flag, - SimpleTransitionFlag simple_flag) { - return CopyReplaceDescriptors( - map, descriptors, flag, Handle::null(), simple_flag); -} - - -Handle Map::CopyReplaceDescriptors(Handle map, - Handle descriptors, - TransitionFlag flag, - Handle name, + MaybeHandle maybe_name, SimpleTransitionFlag simple_flag) { ASSERT(descriptors->IsSortedNoDuplicates()); @@ -6984,6 +6966,8 @@ Handle Map::CopyReplaceDescriptors(Handle map, result->InitializeDescriptors(*descriptors); if (flag == INSERT_TRANSITION && map->CanHaveMoreTransitions()) { + Handle name; + CHECK(maybe_name.ToHandle(&name)); Handle transitions = TransitionArray::CopyInsert( map, name, result, simple_flag); map->set_transitions(*transitions); @@ -7120,7 +7104,8 @@ Handle Map::Copy(Handle map) { int number_of_own_descriptors = map->NumberOfOwnDescriptors(); Handle new_descriptors = DescriptorArray::CopyUpTo(descriptors, number_of_own_descriptors); - return CopyReplaceDescriptors(map, new_descriptors, OMIT_TRANSITION); + return CopyReplaceDescriptors( + map, new_descriptors, OMIT_TRANSITION, MaybeHandle()); } @@ -7153,6 +7138,20 @@ Handle Map::Create(Handle constructor, } +Handle Map::CopyForFreeze(Handle map) { + int num_descriptors = map->NumberOfOwnDescriptors(); + Isolate* isolate = map->GetIsolate(); + Handle new_desc = DescriptorArray::CopyUpToAddAttributes( + handle(map->instance_descriptors(), isolate), num_descriptors, FROZEN); + Handle new_map = Map::CopyReplaceDescriptors( + map, new_desc, INSERT_TRANSITION, isolate->factory()->frozen_symbol()); + new_map->freeze(); + new_map->set_is_extensible(false); + new_map->set_elements_kind(DICTIONARY_ELEMENTS); + return new_map; +} + + Handle Map::CopyAddDescriptor(Handle map, Descriptor* descriptor, TransitionFlag flag) { diff --git a/src/objects.h b/src/objects.h index 31ee16c..3751613 100644 --- a/src/objects.h +++ b/src/objects.h @@ -6398,17 +6398,6 @@ class Map: public HeapObject { static Handle CurrentMapForDeprecatedInternal(Handle map); static Handle CopyDropDescriptors(Handle map); - static Handle CopyReplaceDescriptors( - Handle map, - Handle descriptors, - TransitionFlag flag, - Handle name, - SimpleTransitionFlag simple_flag = FULL_TRANSITION); - static Handle CopyReplaceDescriptors( - Handle map, - Handle descriptors, - TransitionFlag flag, - SimpleTransitionFlag simple_flag = FULL_TRANSITION); static Handle CopyInsertDescriptor(Handle map, Descriptor* descriptor, TransitionFlag flag); @@ -6441,6 +6430,8 @@ class Map: public HeapObject { static Handle CopyForObserved(Handle map); + static Handle CopyForFreeze(Handle map); + static Handle CopyNormalized(Handle map, PropertyNormalizationMode mode, NormalizedMapSharingMode sharing); @@ -6686,6 +6677,12 @@ class Map: public HeapObject { static Handle CopyAddDescriptor(Handle map, Descriptor* descriptor, TransitionFlag flag); + static Handle CopyReplaceDescriptors( + Handle map, + Handle descriptors, + TransitionFlag flag, + MaybeHandle maybe_name, + SimpleTransitionFlag simple_flag = FULL_TRANSITION); // Zaps the contents of backing data structures. Note that the // heap verifier (i.e. VerifyMarkingVisitor) relies on zapping of objects -- 2.7.4