Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(96)

Side by Side Diff: src/objects.cc

Issue 1762273002: [LookupIterator] Avoid additional descriptor lookup in TransitionToAccessorProperty (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/objects.h ('k') | test/cctest/test-field-type-tracking.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/objects.h" 5 #include "src/objects.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <iomanip> 8 #include <iomanip>
9 #include <sstream> 9 #include <sstream>
10 10
(...skipping 9798 matching lines...) Expand 10 before | Expand all | Expand 10 after
9809 map->PrintReconfiguration(stdout, descriptor, kind, attributes); 9809 map->PrintReconfiguration(stdout, descriptor, kind, attributes);
9810 } 9810 }
9811 9811
9812 Isolate* isolate = map->GetIsolate(); 9812 Isolate* isolate = map->GetIsolate();
9813 Handle<Map> new_map = ReconfigureProperty( 9813 Handle<Map> new_map = ReconfigureProperty(
9814 map, descriptor, kind, attributes, Representation::None(), 9814 map, descriptor, kind, attributes, Representation::None(),
9815 FieldType::None(isolate), FORCE_FIELD); 9815 FieldType::None(isolate), FORCE_FIELD);
9816 return new_map; 9816 return new_map;
9817 } 9817 }
9818 9818
9819
9820 Handle<Map> Map::TransitionToAccessorProperty(Handle<Map> map, 9819 Handle<Map> Map::TransitionToAccessorProperty(Handle<Map> map,
9821 Handle<Name> name, 9820 Handle<Name> name, int descriptor,
9822 AccessorComponent component, 9821 AccessorComponent component,
9823 Handle<Object> accessor, 9822 Handle<Object> accessor,
9824 PropertyAttributes attributes) { 9823 PropertyAttributes attributes) {
9825 DCHECK(name->IsUniqueName()); 9824 DCHECK(name->IsUniqueName());
9826 Isolate* isolate = name->GetIsolate(); 9825 Isolate* isolate = name->GetIsolate();
9827 9826
9828 // Dictionary maps can always have additional data properties. 9827 // Dictionary maps can always have additional data properties.
9829 if (map->is_dictionary_map()) return map; 9828 if (map->is_dictionary_map()) return map;
9830 9829
9831 // Migrate to the newest map before transitioning to the new property. 9830 // Migrate to the newest map before transitioning to the new property.
(...skipping 22 matching lines...) Expand all
9854 Handle<AccessorPair> pair = Handle<AccessorPair>::cast(maybe_pair); 9853 Handle<AccessorPair> pair = Handle<AccessorPair>::cast(maybe_pair);
9855 if (pair->get(component) != *accessor) { 9854 if (pair->get(component) != *accessor) {
9856 return Map::Normalize(map, mode, "TransitionToDifferentAccessor"); 9855 return Map::Normalize(map, mode, "TransitionToDifferentAccessor");
9857 } 9856 }
9858 9857
9859 return transition; 9858 return transition;
9860 } 9859 }
9861 9860
9862 Handle<AccessorPair> pair; 9861 Handle<AccessorPair> pair;
9863 DescriptorArray* old_descriptors = map->instance_descriptors(); 9862 DescriptorArray* old_descriptors = map->instance_descriptors();
9864 int descriptor = old_descriptors->SearchWithCache(isolate, *name, *map);
9865 if (descriptor != DescriptorArray::kNotFound) { 9863 if (descriptor != DescriptorArray::kNotFound) {
9866 if (descriptor != map->LastAdded()) { 9864 if (descriptor != map->LastAdded()) {
9867 return Map::Normalize(map, mode, "AccessorsOverwritingNonLast"); 9865 return Map::Normalize(map, mode, "AccessorsOverwritingNonLast");
9868 } 9866 }
9869 PropertyDetails old_details = old_descriptors->GetDetails(descriptor); 9867 PropertyDetails old_details = old_descriptors->GetDetails(descriptor);
9870 if (old_details.type() != ACCESSOR_CONSTANT) { 9868 if (old_details.type() != ACCESSOR_CONSTANT) {
9871 return Map::Normalize(map, mode, "AccessorsOverwritingNonAccessors"); 9869 return Map::Normalize(map, mode, "AccessorsOverwritingNonAccessors");
9872 } 9870 }
9873 9871
9874 if (old_details.attributes() != attributes) { 9872 if (old_details.attributes() != attributes) {
(...skipping 9894 matching lines...) Expand 10 before | Expand all | Expand 10 after
19769 if (cell->value() != *new_value) { 19767 if (cell->value() != *new_value) {
19770 cell->set_value(*new_value); 19768 cell->set_value(*new_value);
19771 Isolate* isolate = cell->GetIsolate(); 19769 Isolate* isolate = cell->GetIsolate();
19772 cell->dependent_code()->DeoptimizeDependentCodeGroup( 19770 cell->dependent_code()->DeoptimizeDependentCodeGroup(
19773 isolate, DependentCode::kPropertyCellChangedGroup); 19771 isolate, DependentCode::kPropertyCellChangedGroup);
19774 } 19772 }
19775 } 19773 }
19776 19774
19777 } // namespace internal 19775 } // namespace internal
19778 } // namespace v8 19776 } // namespace v8
OLDNEW
« no previous file with comments | « src/objects.h ('k') | test/cctest/test-field-type-tracking.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698