| 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 | 
|---|