OLD | NEW |
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 #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 #include <memory> | 9 #include <memory> |
10 | 10 |
(...skipping 6036 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6047 // TODO(ishell): candidate with JSObject::MigrateToMap(). | 6047 // TODO(ishell): candidate with JSObject::MigrateToMap(). |
6048 bool InstancesNeedRewriting(Map* target); | 6048 bool InstancesNeedRewriting(Map* target); |
6049 bool InstancesNeedRewriting(Map* target, int target_number_of_fields, | 6049 bool InstancesNeedRewriting(Map* target, int target_number_of_fields, |
6050 int target_inobject, int target_unused, | 6050 int target_inobject, int target_unused, |
6051 int* old_number_of_fields); | 6051 int* old_number_of_fields); |
6052 // TODO(ishell): moveit! | 6052 // TODO(ishell): moveit! |
6053 static Handle<Map> GeneralizeAllFieldRepresentations(Handle<Map> map); | 6053 static Handle<Map> GeneralizeAllFieldRepresentations(Handle<Map> map); |
6054 MUST_USE_RESULT static Handle<FieldType> GeneralizeFieldType( | 6054 MUST_USE_RESULT static Handle<FieldType> GeneralizeFieldType( |
6055 Representation rep1, Handle<FieldType> type1, Representation rep2, | 6055 Representation rep1, Handle<FieldType> type1, Representation rep2, |
6056 Handle<FieldType> type2, Isolate* isolate); | 6056 Handle<FieldType> type2, Isolate* isolate); |
6057 static void GeneralizeFieldType(Handle<Map> map, int modify_index, | 6057 static void GeneralizeField(Handle<Map> map, int modify_index, |
6058 Representation new_representation, | 6058 Representation new_representation, |
6059 Handle<FieldType> new_field_type); | 6059 Handle<FieldType> new_field_type); |
6060 | 6060 |
6061 static inline Handle<Map> ReconfigureProperty( | 6061 static Handle<Map> ReconfigureProperty(Handle<Map> map, int modify_index, |
6062 Handle<Map> map, int modify_index, PropertyKind new_kind, | 6062 PropertyKind new_kind, |
6063 PropertyAttributes new_attributes, Representation new_representation, | 6063 PropertyAttributes new_attributes, |
6064 Handle<FieldType> new_field_type, StoreMode store_mode); | 6064 Representation new_representation, |
| 6065 Handle<FieldType> new_field_type, |
| 6066 StoreMode store_mode); |
6065 | 6067 |
6066 static inline Handle<Map> ReconfigureElementsKind( | 6068 static Handle<Map> ReconfigureElementsKind(Handle<Map> map, |
6067 Handle<Map> map, ElementsKind new_elements_kind); | 6069 ElementsKind new_elements_kind); |
6068 | 6070 |
6069 static Handle<Map> PrepareForDataProperty(Handle<Map> old_map, | 6071 static Handle<Map> PrepareForDataProperty(Handle<Map> old_map, |
6070 int descriptor_number, | 6072 int descriptor_number, |
6071 Handle<Object> value); | 6073 Handle<Object> value); |
6072 | 6074 |
6073 static Handle<Map> Normalize(Handle<Map> map, PropertyNormalizationMode mode, | 6075 static Handle<Map> Normalize(Handle<Map> map, PropertyNormalizationMode mode, |
6074 const char* reason); | 6076 const char* reason); |
6075 | 6077 |
6076 // Tells whether the map is used for JSObjects in dictionary mode (ie | 6078 // Tells whether the map is used for JSObjects in dictionary mode (ie |
6077 // normalized objects, ie objects for which HasFastProperties returns false). | 6079 // normalized objects, ie objects for which HasFastProperties returns false). |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6180 | 6182 |
6181 static inline Handle<Map> CopyInitialMap(Handle<Map> map); | 6183 static inline Handle<Map> CopyInitialMap(Handle<Map> map); |
6182 static Handle<Map> CopyInitialMap(Handle<Map> map, int instance_size, | 6184 static Handle<Map> CopyInitialMap(Handle<Map> map, int instance_size, |
6183 int in_object_properties, | 6185 int in_object_properties, |
6184 int unused_property_fields); | 6186 int unused_property_fields); |
6185 static Handle<Map> CopyDropDescriptors(Handle<Map> map); | 6187 static Handle<Map> CopyDropDescriptors(Handle<Map> map); |
6186 static Handle<Map> CopyInsertDescriptor(Handle<Map> map, | 6188 static Handle<Map> CopyInsertDescriptor(Handle<Map> map, |
6187 Descriptor* descriptor, | 6189 Descriptor* descriptor, |
6188 TransitionFlag flag); | 6190 TransitionFlag flag); |
6189 | 6191 |
| 6192 static Handle<Object> WrapType(Handle<FieldType> type); |
| 6193 |
6190 MUST_USE_RESULT static MaybeHandle<Map> CopyWithField( | 6194 MUST_USE_RESULT static MaybeHandle<Map> CopyWithField( |
6191 Handle<Map> map, Handle<Name> name, Handle<FieldType> type, | 6195 Handle<Map> map, Handle<Name> name, Handle<FieldType> type, |
6192 PropertyAttributes attributes, Representation representation, | 6196 PropertyAttributes attributes, Representation representation, |
6193 TransitionFlag flag); | 6197 TransitionFlag flag); |
6194 | 6198 |
6195 MUST_USE_RESULT static MaybeHandle<Map> CopyWithConstant( | 6199 MUST_USE_RESULT static MaybeHandle<Map> CopyWithConstant( |
6196 Handle<Map> map, | 6200 Handle<Map> map, |
6197 Handle<Name> name, | 6201 Handle<Name> name, |
6198 Handle<Object> constant, | 6202 Handle<Object> constant, |
6199 PropertyAttributes attributes, | 6203 PropertyAttributes attributes, |
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6492 Descriptor* descriptor, | 6496 Descriptor* descriptor, |
6493 int index, | 6497 int index, |
6494 TransitionFlag flag); | 6498 TransitionFlag flag); |
6495 static MUST_USE_RESULT MaybeHandle<Map> TryReconfigureExistingProperty( | 6499 static MUST_USE_RESULT MaybeHandle<Map> TryReconfigureExistingProperty( |
6496 Handle<Map> map, int descriptor, PropertyKind kind, | 6500 Handle<Map> map, int descriptor, PropertyKind kind, |
6497 PropertyAttributes attributes, const char** reason); | 6501 PropertyAttributes attributes, const char** reason); |
6498 | 6502 |
6499 static Handle<Map> CopyNormalized(Handle<Map> map, | 6503 static Handle<Map> CopyNormalized(Handle<Map> map, |
6500 PropertyNormalizationMode mode); | 6504 PropertyNormalizationMode mode); |
6501 | 6505 |
6502 static Handle<Map> Reconfigure(Handle<Map> map, | 6506 // TODO(ishell): Move to MapUpdater. |
6503 ElementsKind new_elements_kind, | |
6504 int modify_index, PropertyKind new_kind, | |
6505 PropertyAttributes new_attributes, | |
6506 Representation new_representation, | |
6507 Handle<FieldType> new_field_type, | |
6508 StoreMode store_mode); | |
6509 | |
6510 static Handle<Map> CopyGeneralizeAllRepresentations( | 6507 static Handle<Map> CopyGeneralizeAllRepresentations( |
6511 Handle<Map> map, ElementsKind elements_kind, int modify_index, | 6508 Handle<Map> map, ElementsKind elements_kind, int modify_index, |
6512 StoreMode store_mode, PropertyKind kind, PropertyAttributes attributes, | 6509 StoreMode store_mode, PropertyKind kind, PropertyAttributes attributes, |
6513 const char* reason); | 6510 const char* reason); |
6514 | 6511 |
6515 // Fires when the layout of an object with a leaf map changes. | 6512 // Fires when the layout of an object with a leaf map changes. |
6516 // This includes adding transitions to the leaf map or changing | 6513 // This includes adding transitions to the leaf map or changing |
6517 // the descriptor array. | 6514 // the descriptor array. |
6518 inline void NotifyLeafMapLayoutChange(); | 6515 inline void NotifyLeafMapLayoutChange(); |
6519 | 6516 |
6520 void DeprecateTransitionTree(); | 6517 void DeprecateTransitionTree(); |
6521 | 6518 |
6522 void ReplaceDescriptors(DescriptorArray* new_descriptors, | 6519 void ReplaceDescriptors(DescriptorArray* new_descriptors, |
6523 LayoutDescriptor* new_layout_descriptor); | 6520 LayoutDescriptor* new_layout_descriptor); |
6524 | 6521 |
6525 | 6522 |
6526 Map* FindLastMatchMap(int verbatim, int length, DescriptorArray* descriptors); | |
6527 | |
6528 // Update field type of the given descriptor to new representation and new | 6523 // Update field type of the given descriptor to new representation and new |
6529 // type. The type must be prepared for storing in descriptor array: | 6524 // type. The type must be prepared for storing in descriptor array: |
6530 // it must be either a simple type or a map wrapped in a weak cell. | 6525 // it must be either a simple type or a map wrapped in a weak cell. |
6531 void UpdateFieldType(int descriptor_number, Handle<Name> name, | 6526 void UpdateFieldType(int descriptor_number, Handle<Name> name, |
6532 Representation new_representation, | 6527 Representation new_representation, |
6533 Handle<Object> new_wrapped_type); | 6528 Handle<Object> new_wrapped_type); |
6534 | 6529 |
| 6530 // TODO(ishell): Move to MapUpdater. |
6535 void PrintReconfiguration(FILE* file, int modify_index, PropertyKind kind, | 6531 void PrintReconfiguration(FILE* file, int modify_index, PropertyKind kind, |
6536 PropertyAttributes attributes); | 6532 PropertyAttributes attributes); |
| 6533 // TODO(ishell): Move to MapUpdater. |
6537 void PrintGeneralization(FILE* file, const char* reason, int modify_index, | 6534 void PrintGeneralization(FILE* file, const char* reason, int modify_index, |
6538 int split, int descriptors, bool constant_to_field, | 6535 int split, int descriptors, bool constant_to_field, |
6539 Representation old_representation, | 6536 Representation old_representation, |
6540 Representation new_representation, | 6537 Representation new_representation, |
6541 MaybeHandle<FieldType> old_field_type, | 6538 MaybeHandle<FieldType> old_field_type, |
6542 MaybeHandle<Object> old_value, | 6539 MaybeHandle<Object> old_value, |
6543 MaybeHandle<FieldType> new_field_type, | 6540 MaybeHandle<FieldType> new_field_type, |
6544 MaybeHandle<Object> new_value); | 6541 MaybeHandle<Object> new_value); |
6545 | |
6546 static const int kFastPropertiesSoftLimit = 12; | 6542 static const int kFastPropertiesSoftLimit = 12; |
6547 static const int kMaxFastProperties = 128; | 6543 static const int kMaxFastProperties = 128; |
6548 | 6544 |
| 6545 friend class MapUpdater; |
| 6546 |
6549 DISALLOW_IMPLICIT_CONSTRUCTORS(Map); | 6547 DISALLOW_IMPLICIT_CONSTRUCTORS(Map); |
6550 }; | 6548 }; |
6551 | 6549 |
6552 | 6550 |
6553 // An abstract superclass, a marker class really, for simple structure classes. | 6551 // An abstract superclass, a marker class really, for simple structure classes. |
6554 // It doesn't carry much functionality but allows struct classes to be | 6552 // It doesn't carry much functionality but allows struct classes to be |
6555 // identified in the type system. | 6553 // identified in the type system. |
6556 class Struct: public HeapObject { | 6554 class Struct: public HeapObject { |
6557 public: | 6555 public: |
6558 inline void InitializeBody(int object_size); | 6556 inline void InitializeBody(int object_size); |
(...skipping 5192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11751 } | 11749 } |
11752 }; | 11750 }; |
11753 | 11751 |
11754 | 11752 |
11755 } // NOLINT, false-positive due to second-order macros. | 11753 } // NOLINT, false-positive due to second-order macros. |
11756 } // NOLINT, false-positive due to second-order macros. | 11754 } // NOLINT, false-positive due to second-order macros. |
11757 | 11755 |
11758 #include "src/objects/object-macros-undef.h" | 11756 #include "src/objects/object-macros-undef.h" |
11759 | 11757 |
11760 #endif // V8_OBJECTS_H_ | 11758 #endif // V8_OBJECTS_H_ |
OLD | NEW |