OLD | NEW |
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 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 | 273 |
274 enum DebugExtraICState { | 274 enum DebugExtraICState { |
275 DEBUG_BREAK, | 275 DEBUG_BREAK, |
276 DEBUG_PREPARE_STEP_IN | 276 DEBUG_PREPARE_STEP_IN |
277 }; | 277 }; |
278 | 278 |
279 | 279 |
280 // Indicates whether the transition is simple: the target map of the transition | 280 // Indicates whether the transition is simple: the target map of the transition |
281 // either extends the current map with a new property, or it modifies the | 281 // either extends the current map with a new property, or it modifies the |
282 // property that was added last to the current map. | 282 // property that was added last to the current map. |
283 enum SimpleTransitionFlag { SIMPLE_TRANSITION, FULL_TRANSITION }; | 283 enum SimpleTransitionFlag { |
| 284 SIMPLE_PROPERTY_TRANSITION, |
| 285 PROPERTY_TRANSITION, |
| 286 SPECIAL_TRANSITION |
| 287 }; |
284 | 288 |
285 | 289 |
286 // Indicates whether we are only interested in the descriptors of a particular | 290 // Indicates whether we are only interested in the descriptors of a particular |
287 // map, or in all descriptors in the descriptor array. | 291 // map, or in all descriptors in the descriptor array. |
288 enum DescriptorFlag { | 292 enum DescriptorFlag { |
289 ALL_DESCRIPTORS, | 293 ALL_DESCRIPTORS, |
290 OWN_DESCRIPTORS | 294 OWN_DESCRIPTORS |
291 }; | 295 }; |
292 | 296 |
293 // The GC maintains a bit of information, the MarkingParity, which toggles | 297 // The GC maintains a bit of information, the MarkingParity, which toggles |
(...skipping 5523 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5817 | 5821 |
5818 // Returns true if the current map doesn't have DICTIONARY_ELEMENTS but if a | 5822 // Returns true if the current map doesn't have DICTIONARY_ELEMENTS but if a |
5819 // map with DICTIONARY_ELEMENTS was found in the prototype chain. | 5823 // map with DICTIONARY_ELEMENTS was found in the prototype chain. |
5820 bool DictionaryElementsInPrototypeChainOnly(); | 5824 bool DictionaryElementsInPrototypeChainOnly(); |
5821 | 5825 |
5822 inline bool HasTransitionArray() const; | 5826 inline bool HasTransitionArray() const; |
5823 inline bool HasElementsTransition(); | 5827 inline bool HasElementsTransition(); |
5824 inline Map* elements_transition_map(); | 5828 inline Map* elements_transition_map(); |
5825 | 5829 |
5826 inline Map* GetTransition(int transition_index); | 5830 inline Map* GetTransition(int transition_index); |
5827 inline int SearchTransition(Name* name); | 5831 inline int SearchSpecialTransition(Symbol* name); |
| 5832 inline int SearchTransition(PropertyType type, Name* name, |
| 5833 PropertyAttributes attributes); |
5828 inline FixedArrayBase* GetInitialElements(); | 5834 inline FixedArrayBase* GetInitialElements(); |
5829 | 5835 |
5830 DECL_ACCESSORS(transitions, TransitionArray) | 5836 DECL_ACCESSORS(transitions, TransitionArray) |
5831 | 5837 |
5832 static inline Handle<String> ExpectedTransitionKey(Handle<Map> map); | 5838 static inline Handle<String> ExpectedTransitionKey(Handle<Map> map); |
5833 static inline Handle<Map> ExpectedTransitionTarget(Handle<Map> map); | 5839 static inline Handle<Map> ExpectedTransitionTarget(Handle<Map> map); |
5834 | 5840 |
5835 // Try to follow an existing transition to a field with attributes NONE. The | 5841 // Try to follow an existing transition to a field with attributes NONE. The |
5836 // return value indicates whether the transition was successful. | 5842 // return value indicates whether the transition was successful. |
5837 static inline Handle<Map> FindTransitionToField(Handle<Map> map, | 5843 static inline Handle<Map> FindTransitionToField(Handle<Map> map, |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5972 } | 5978 } |
5973 | 5979 |
5974 // Lookup in the map's instance descriptors and fill out the result | 5980 // Lookup in the map's instance descriptors and fill out the result |
5975 // with the given holder if the name is found. The holder may be | 5981 // with the given holder if the name is found. The holder may be |
5976 // NULL when this function is used from the compiler. | 5982 // NULL when this function is used from the compiler. |
5977 inline void LookupDescriptor(JSObject* holder, | 5983 inline void LookupDescriptor(JSObject* holder, |
5978 Name* name, | 5984 Name* name, |
5979 LookupResult* result); | 5985 LookupResult* result); |
5980 | 5986 |
5981 inline void LookupTransition(JSObject* holder, Name* name, | 5987 inline void LookupTransition(JSObject* holder, Name* name, |
| 5988 PropertyAttributes attributes, |
5982 LookupResult* result); | 5989 LookupResult* result); |
5983 | 5990 |
5984 inline PropertyDetails GetLastDescriptorDetails(); | 5991 inline PropertyDetails GetLastDescriptorDetails(); |
5985 | 5992 |
5986 // The size of transition arrays are limited so they do not end up in large | 5993 // The size of transition arrays are limited so they do not end up in large |
5987 // object space. Otherwise ClearNonLiveTransitions would leak memory while | 5994 // object space. Otherwise ClearNonLiveTransitions would leak memory while |
5988 // applying in-place right trimming. | 5995 // applying in-place right trimming. |
5989 inline bool CanHaveMoreTransitions(); | 5996 inline bool CanHaveMoreTransitions(); |
5990 | 5997 |
5991 int LastAdded() { | 5998 int LastAdded() { |
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6362 static Handle<Map> CopyInstallDescriptors( | 6369 static Handle<Map> CopyInstallDescriptors( |
6363 Handle<Map> map, int new_descriptor, Handle<DescriptorArray> descriptors, | 6370 Handle<Map> map, int new_descriptor, Handle<DescriptorArray> descriptors, |
6364 Handle<LayoutDescriptor> layout_descriptor); | 6371 Handle<LayoutDescriptor> layout_descriptor); |
6365 static Handle<Map> CopyAddDescriptor(Handle<Map> map, | 6372 static Handle<Map> CopyAddDescriptor(Handle<Map> map, |
6366 Descriptor* descriptor, | 6373 Descriptor* descriptor, |
6367 TransitionFlag flag); | 6374 TransitionFlag flag); |
6368 static Handle<Map> CopyReplaceDescriptors( | 6375 static Handle<Map> CopyReplaceDescriptors( |
6369 Handle<Map> map, Handle<DescriptorArray> descriptors, | 6376 Handle<Map> map, Handle<DescriptorArray> descriptors, |
6370 Handle<LayoutDescriptor> layout_descriptor, TransitionFlag flag, | 6377 Handle<LayoutDescriptor> layout_descriptor, TransitionFlag flag, |
6371 MaybeHandle<Name> maybe_name, const char* reason, | 6378 MaybeHandle<Name> maybe_name, const char* reason, |
6372 SimpleTransitionFlag simple_flag = FULL_TRANSITION); | 6379 SimpleTransitionFlag simple_flag); |
| 6380 |
6373 static Handle<Map> CopyReplaceDescriptor(Handle<Map> map, | 6381 static Handle<Map> CopyReplaceDescriptor(Handle<Map> map, |
6374 Handle<DescriptorArray> descriptors, | 6382 Handle<DescriptorArray> descriptors, |
6375 Descriptor* descriptor, | 6383 Descriptor* descriptor, |
6376 int index, | 6384 int index, |
6377 TransitionFlag flag); | 6385 TransitionFlag flag); |
6378 | 6386 |
6379 static Handle<Map> CopyNormalized(Handle<Map> map, | 6387 static Handle<Map> CopyNormalized(Handle<Map> map, |
6380 PropertyNormalizationMode mode); | 6388 PropertyNormalizationMode mode); |
6381 | 6389 |
6382 // Fires when the layout of an object with a leaf map changes. | 6390 // Fires when the layout of an object with a leaf map changes. |
6383 // This includes adding transitions to the leaf map or changing | 6391 // This includes adding transitions to the leaf map or changing |
6384 // the descriptor array. | 6392 // the descriptor array. |
6385 inline void NotifyLeafMapLayoutChange(); | 6393 inline void NotifyLeafMapLayoutChange(); |
6386 | 6394 |
6387 static Handle<Map> TransitionElementsToSlow(Handle<Map> object, | 6395 static Handle<Map> TransitionElementsToSlow(Handle<Map> object, |
6388 ElementsKind to_kind); | 6396 ElementsKind to_kind); |
6389 | 6397 |
6390 // Zaps the contents of backing data structures. Note that the | 6398 // Zaps the contents of backing data structures. Note that the |
6391 // heap verifier (i.e. VerifyMarkingVisitor) relies on zapping of objects | 6399 // heap verifier (i.e. VerifyMarkingVisitor) relies on zapping of objects |
6392 // holding weak references when incremental marking is used, because it also | 6400 // holding weak references when incremental marking is used, because it also |
6393 // iterates over objects that are otherwise unreachable. | 6401 // iterates over objects that are otherwise unreachable. |
6394 // In general we only want to call these functions in release mode when | 6402 // In general we only want to call these functions in release mode when |
6395 // heap verification is turned on. | 6403 // heap verification is turned on. |
6396 void ZapPrototypeTransitions(); | 6404 void ZapPrototypeTransitions(); |
6397 void ZapTransitions(); | 6405 void ZapTransitions(); |
6398 | 6406 |
6399 void DeprecateTransitionTree(); | 6407 void DeprecateTransitionTree(); |
6400 bool DeprecateTarget(Name* key, DescriptorArray* new_descriptors, | 6408 bool DeprecateTarget(PropertyType type, Name* key, |
| 6409 PropertyAttributes attributes, |
| 6410 DescriptorArray* new_descriptors, |
6401 LayoutDescriptor* new_layout_descriptor); | 6411 LayoutDescriptor* new_layout_descriptor); |
6402 | 6412 |
6403 Map* FindLastMatchMap(int verbatim, int length, DescriptorArray* descriptors); | 6413 Map* FindLastMatchMap(int verbatim, int length, DescriptorArray* descriptors); |
6404 | 6414 |
6405 void UpdateFieldType(int descriptor_number, Handle<Name> name, | 6415 void UpdateFieldType(int descriptor_number, Handle<Name> name, |
6406 Representation new_representation, | 6416 Representation new_representation, |
6407 Handle<HeapType> new_type); | 6417 Handle<HeapType> new_type); |
6408 | 6418 |
6409 void PrintGeneralization(FILE* file, | 6419 void PrintGeneralization(FILE* file, |
6410 const char* reason, | 6420 const char* reason, |
(...skipping 4601 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11012 } else { | 11022 } else { |
11013 value &= ~(1 << bit_position); | 11023 value &= ~(1 << bit_position); |
11014 } | 11024 } |
11015 return value; | 11025 return value; |
11016 } | 11026 } |
11017 }; | 11027 }; |
11018 | 11028 |
11019 } } // namespace v8::internal | 11029 } } // namespace v8::internal |
11020 | 11030 |
11021 #endif // V8_OBJECTS_H_ | 11031 #endif // V8_OBJECTS_H_ |
OLD | NEW |