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

Side by Side Diff: src/objects.h

Issue 888623002: Property reconfiguring implemented. Tests added. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 10 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/lookup.cc ('k') | src/objects.cc » ('j') | src/objects.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 #ifndef V8_OBJECTS_H_ 5 #ifndef V8_OBJECTS_H_
6 #define V8_OBJECTS_H_ 6 #define V8_OBJECTS_H_
7 7
8 #include <iosfwd> 8 #include <iosfwd>
9 9
10 #include "src/allocation.h" 10 #include "src/allocation.h"
(...skipping 5880 matching lines...) Expand 10 before | Expand all | Expand 10 after
5891 int* old_number_of_fields); 5891 int* old_number_of_fields);
5892 // TODO(ishell): moveit! 5892 // TODO(ishell): moveit!
5893 static Handle<Map> GeneralizeAllFieldRepresentations(Handle<Map> map); 5893 static Handle<Map> GeneralizeAllFieldRepresentations(Handle<Map> map);
5894 MUST_USE_RESULT static Handle<HeapType> GeneralizeFieldType( 5894 MUST_USE_RESULT static Handle<HeapType> GeneralizeFieldType(
5895 Handle<HeapType> type1, 5895 Handle<HeapType> type1,
5896 Handle<HeapType> type2, 5896 Handle<HeapType> type2,
5897 Isolate* isolate); 5897 Isolate* isolate);
5898 static void GeneralizeFieldType(Handle<Map> map, int modify_index, 5898 static void GeneralizeFieldType(Handle<Map> map, int modify_index,
5899 Representation new_representation, 5899 Representation new_representation,
5900 Handle<HeapType> new_field_type); 5900 Handle<HeapType> new_field_type);
5901 static Handle<Map> GeneralizeRepresentation( 5901 static Handle<Map> ReconfigureProperty(Handle<Map> map, int modify_index,
5902 Handle<Map> map, 5902 PropertyKind new_kind,
5903 int modify_index, 5903 PropertyAttributes new_attributes,
5904 Representation new_representation, 5904 Representation new_representation,
5905 Handle<HeapType> new_field_type, 5905 Handle<HeapType> new_field_type,
5906 StoreMode store_mode); 5906 StoreMode store_mode);
5907 static Handle<Map> CopyGeneralizeAllRepresentations( 5907 static Handle<Map> CopyGeneralizeAllRepresentations(
5908 Handle<Map> map, 5908 Handle<Map> map, int modify_index, StoreMode store_mode,
5909 int modify_index, 5909 PropertyKind kind, PropertyAttributes attributes, const char* reason);
5910 StoreMode store_mode,
5911 PropertyAttributes attributes,
5912 const char* reason);
5913 static Handle<Map> CopyGeneralizeAllRepresentations(
5914 Handle<Map> map,
5915 int modify_index,
5916 StoreMode store_mode,
5917 const char* reason);
5918 5910
5919 static Handle<Map> PrepareForDataProperty(Handle<Map> old_map, 5911 static Handle<Map> PrepareForDataProperty(Handle<Map> old_map,
5920 int descriptor_number, 5912 int descriptor_number,
5921 Handle<Object> value); 5913 Handle<Object> value);
5922 5914
5923 static Handle<Map> Normalize(Handle<Map> map, PropertyNormalizationMode mode, 5915 static Handle<Map> Normalize(Handle<Map> map, PropertyNormalizationMode mode,
5924 const char* reason); 5916 const char* reason);
5925 5917
5926 // Returns the constructor name (the name (possibly, inferred name) of the 5918 // Returns the constructor name (the name (possibly, inferred name) of the
5927 // function that was used to instantiate the object). 5919 // function that was used to instantiate the object).
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
6135 // dictionaries. 6127 // dictionaries.
6136 inline bool TooManyFastProperties(StoreFromKeyed store_mode); 6128 inline bool TooManyFastProperties(StoreFromKeyed store_mode);
6137 static Handle<Map> TransitionToDataProperty(Handle<Map> map, 6129 static Handle<Map> TransitionToDataProperty(Handle<Map> map,
6138 Handle<Name> name, 6130 Handle<Name> name,
6139 Handle<Object> value, 6131 Handle<Object> value,
6140 PropertyAttributes attributes, 6132 PropertyAttributes attributes,
6141 StoreFromKeyed store_mode); 6133 StoreFromKeyed store_mode);
6142 static Handle<Map> TransitionToAccessorProperty( 6134 static Handle<Map> TransitionToAccessorProperty(
6143 Handle<Map> map, Handle<Name> name, AccessorComponent component, 6135 Handle<Map> map, Handle<Name> name, AccessorComponent component,
6144 Handle<Object> accessor, PropertyAttributes attributes); 6136 Handle<Object> accessor, PropertyAttributes attributes);
6145 static Handle<Map> ReconfigureDataProperty(Handle<Map> map, int descriptor, 6137 static Handle<Map> ReconfigureExistingProperty(Handle<Map> map,
6146 PropertyAttributes attributes); 6138 int descriptor,
6139 PropertyKind kind,
6140 PropertyAttributes attributes);
6147 6141
6148 inline void AppendDescriptor(Descriptor* desc); 6142 inline void AppendDescriptor(Descriptor* desc);
6149 6143
6150 // Returns a copy of the map, prepared for inserting into the transition 6144 // Returns a copy of the map, prepared for inserting into the transition
6151 // tree (if the |map| owns descriptors then the new one will share 6145 // tree (if the |map| owns descriptors then the new one will share
6152 // descriptors with |map|). 6146 // descriptors with |map|).
6153 static Handle<Map> CopyForTransition(Handle<Map> map, const char* reason); 6147 static Handle<Map> CopyForTransition(Handle<Map> map, const char* reason);
6154 6148
6155 // Returns a copy of the map, with all transitions dropped from the 6149 // Returns a copy of the map, with all transitions dropped from the
6156 // instance descriptors. 6150 // instance descriptors.
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
6421 Handle<Map> map, Handle<DescriptorArray> descriptors, 6415 Handle<Map> map, Handle<DescriptorArray> descriptors,
6422 Handle<LayoutDescriptor> layout_descriptor, TransitionFlag flag, 6416 Handle<LayoutDescriptor> layout_descriptor, TransitionFlag flag,
6423 MaybeHandle<Name> maybe_name, const char* reason, 6417 MaybeHandle<Name> maybe_name, const char* reason,
6424 SimpleTransitionFlag simple_flag); 6418 SimpleTransitionFlag simple_flag);
6425 6419
6426 static Handle<Map> CopyReplaceDescriptor(Handle<Map> map, 6420 static Handle<Map> CopyReplaceDescriptor(Handle<Map> map,
6427 Handle<DescriptorArray> descriptors, 6421 Handle<DescriptorArray> descriptors,
6428 Descriptor* descriptor, 6422 Descriptor* descriptor,
6429 int index, 6423 int index,
6430 TransitionFlag flag); 6424 TransitionFlag flag);
6425 static MUST_USE_RESULT MaybeHandle<Map> TryReconfigureExistingProperty(
6426 Handle<Map> map, int descriptor, PropertyKind kind,
6427 PropertyAttributes attributes, const char** reason);
6431 6428
6432 static Handle<Map> CopyNormalized(Handle<Map> map, 6429 static Handle<Map> CopyNormalized(Handle<Map> map,
6433 PropertyNormalizationMode mode); 6430 PropertyNormalizationMode mode);
6434 6431
6435 // Fires when the layout of an object with a leaf map changes. 6432 // Fires when the layout of an object with a leaf map changes.
6436 // This includes adding transitions to the leaf map or changing 6433 // This includes adding transitions to the leaf map or changing
6437 // the descriptor array. 6434 // the descriptor array.
6438 inline void NotifyLeafMapLayoutChange(); 6435 inline void NotifyLeafMapLayoutChange();
6439 6436
6440 static Handle<Map> TransitionElementsToSlow(Handle<Map> object, 6437 static Handle<Map> TransitionElementsToSlow(Handle<Map> object,
(...skipping 13 matching lines...) Expand all
6454 PropertyAttributes attributes, 6451 PropertyAttributes attributes,
6455 DescriptorArray* new_descriptors, 6452 DescriptorArray* new_descriptors,
6456 LayoutDescriptor* new_layout_descriptor); 6453 LayoutDescriptor* new_layout_descriptor);
6457 6454
6458 Map* FindLastMatchMap(int verbatim, int length, DescriptorArray* descriptors); 6455 Map* FindLastMatchMap(int verbatim, int length, DescriptorArray* descriptors);
6459 6456
6460 void UpdateFieldType(int descriptor_number, Handle<Name> name, 6457 void UpdateFieldType(int descriptor_number, Handle<Name> name,
6461 Representation new_representation, 6458 Representation new_representation,
6462 Handle<HeapType> new_type); 6459 Handle<HeapType> new_type);
6463 6460
6461 void PrintReconfiguration(FILE* file, int modify_index, PropertyKind kind,
6462 PropertyAttributes attributes);
6464 void PrintGeneralization(FILE* file, 6463 void PrintGeneralization(FILE* file,
6465 const char* reason, 6464 const char* reason,
6466 int modify_index, 6465 int modify_index,
6467 int split, 6466 int split,
6468 int descriptors, 6467 int descriptors,
6469 bool constant_to_field, 6468 bool constant_to_field,
6470 Representation old_representation, 6469 Representation old_representation,
6471 Representation new_representation, 6470 Representation new_representation,
6472 HeapType* old_field_type, 6471 HeapType* old_field_type,
6473 HeapType* new_field_type); 6472 HeapType* new_field_type);
6474 6473
6474 #ifdef OBJECT_PRINT
6475 void PrintPrototypeTransitions(std::ostream& os); // NOLINT
6476 #endif
6477
6475 static inline void SetPrototypeTransitions( 6478 static inline void SetPrototypeTransitions(
6476 Handle<Map> map, 6479 Handle<Map> map,
6477 Handle<FixedArray> prototype_transitions); 6480 Handle<FixedArray> prototype_transitions);
6478 6481
6479 static Handle<Map> GetPrototypeTransition(Handle<Map> map, 6482 static Handle<Map> GetPrototypeTransition(Handle<Map> map,
6480 Handle<Object> prototype); 6483 Handle<Object> prototype);
6481 static Handle<Map> PutPrototypeTransition(Handle<Map> map, 6484 static Handle<Map> PutPrototypeTransition(Handle<Map> map,
6482 Handle<Object> prototype, 6485 Handle<Object> prototype,
6483 Handle<Map> target_map); 6486 Handle<Map> target_map);
6484 6487
(...skipping 4003 matching lines...) Expand 10 before | Expand all | Expand 10 after
10488 10491
10489 // Note: Returns undefined instead in case of a hole. 10492 // Note: Returns undefined instead in case of a hole.
10490 Object* GetComponent(AccessorComponent component); 10493 Object* GetComponent(AccessorComponent component);
10491 10494
10492 // Set both components, skipping arguments which are a JavaScript null. 10495 // Set both components, skipping arguments which are a JavaScript null.
10493 void SetComponents(Object* getter, Object* setter) { 10496 void SetComponents(Object* getter, Object* setter) {
10494 if (!getter->IsNull()) set_getter(getter); 10497 if (!getter->IsNull()) set_getter(getter);
10495 if (!setter->IsNull()) set_setter(setter); 10498 if (!setter->IsNull()) set_setter(setter);
10496 } 10499 }
10497 10500
10501 bool Equals(AccessorPair* pair) {
10502 return (this == pair) || pair->Equals(getter(), setter());
10503 }
10504
10505 bool Equals(Object* getter_value, Object* setter_value) {
10506 return (getter() == getter_value) && (setter() == setter_value);
10507 }
10508
10498 bool ContainsAccessor() { 10509 bool ContainsAccessor() {
10499 return IsJSAccessor(getter()) || IsJSAccessor(setter()); 10510 return IsJSAccessor(getter()) || IsJSAccessor(setter());
10500 } 10511 }
10501 10512
10502 // Dispatched behavior. 10513 // Dispatched behavior.
10503 DECLARE_PRINTER(AccessorPair) 10514 DECLARE_PRINTER(AccessorPair)
10504 DECLARE_VERIFIER(AccessorPair) 10515 DECLARE_VERIFIER(AccessorPair)
10505 10516
10506 static const int kGetterOffset = HeapObject::kHeaderSize; 10517 static const int kGetterOffset = HeapObject::kHeaderSize;
10507 static const int kSetterOffset = kGetterOffset + kPointerSize; 10518 static const int kSetterOffset = kGetterOffset + kPointerSize;
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after
10965 } else { 10976 } else {
10966 value &= ~(1 << bit_position); 10977 value &= ~(1 << bit_position);
10967 } 10978 }
10968 return value; 10979 return value;
10969 } 10980 }
10970 }; 10981 };
10971 10982
10972 } } // namespace v8::internal 10983 } } // namespace v8::internal
10973 10984
10974 #endif // V8_OBJECTS_H_ 10985 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/lookup.cc ('k') | src/objects.cc » ('j') | src/objects.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698