| 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 enum DebugExtraICState { | 273 enum DebugExtraICState { | 
| 274   DEBUG_BREAK, | 274   DEBUG_BREAK, | 
| 275   DEBUG_PREPARE_STEP_IN | 275   DEBUG_PREPARE_STEP_IN | 
| 276 }; | 276 }; | 
| 277 | 277 | 
| 278 | 278 | 
| 279 // Indicates whether the transition is simple: the target map of the transition | 279 // Indicates whether the transition is simple: the target map of the transition | 
| 280 // either extends the current map with a new property, or it modifies the | 280 // either extends the current map with a new property, or it modifies the | 
| 281 // property that was added last to the current map. | 281 // property that was added last to the current map. | 
| 282 enum SimpleTransitionFlag { | 282 enum SimpleTransitionFlag { | 
| 283   SIMPLE_TRANSITION, | 283   SIMPLE_PROPERTY_TRANSITION, | 
| 284   FULL_TRANSITION | 284   PROPERTY_TRANSITION, | 
|  | 285   SPECIAL_TRANSITION | 
| 285 }; | 286 }; | 
| 286 | 287 | 
| 287 | 288 | 
| 288 // Indicates whether we are only interested in the descriptors of a particular | 289 // Indicates whether we are only interested in the descriptors of a particular | 
| 289 // map, or in all descriptors in the descriptor array. | 290 // map, or in all descriptors in the descriptor array. | 
| 290 enum DescriptorFlag { | 291 enum DescriptorFlag { | 
| 291   ALL_DESCRIPTORS, | 292   ALL_DESCRIPTORS, | 
| 292   OWN_DESCRIPTORS | 293   OWN_DESCRIPTORS | 
| 293 }; | 294 }; | 
| 294 | 295 | 
| (...skipping 5518 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5813 | 5814 | 
| 5814   // Returns true if the current map doesn't have DICTIONARY_ELEMENTS but if a | 5815   // Returns true if the current map doesn't have DICTIONARY_ELEMENTS but if a | 
| 5815   // map with DICTIONARY_ELEMENTS was found in the prototype chain. | 5816   // map with DICTIONARY_ELEMENTS was found in the prototype chain. | 
| 5816   bool DictionaryElementsInPrototypeChainOnly(); | 5817   bool DictionaryElementsInPrototypeChainOnly(); | 
| 5817 | 5818 | 
| 5818   inline bool HasTransitionArray() const; | 5819   inline bool HasTransitionArray() const; | 
| 5819   inline bool HasElementsTransition(); | 5820   inline bool HasElementsTransition(); | 
| 5820   inline Map* elements_transition_map(); | 5821   inline Map* elements_transition_map(); | 
| 5821 | 5822 | 
| 5822   inline Map* GetTransition(int transition_index); | 5823   inline Map* GetTransition(int transition_index); | 
| 5823   inline int SearchTransition(Name* name); | 5824   inline int SearchSpecialTransition(Symbol* name); | 
|  | 5825   inline int SearchTransition(PropertyType type, Name* name, | 
|  | 5826                               PropertyAttributes attributes); | 
| 5824   inline FixedArrayBase* GetInitialElements(); | 5827   inline FixedArrayBase* GetInitialElements(); | 
| 5825 | 5828 | 
| 5826   DECL_ACCESSORS(transitions, TransitionArray) | 5829   DECL_ACCESSORS(transitions, TransitionArray) | 
| 5827 | 5830 | 
| 5828   static inline Handle<String> ExpectedTransitionKey(Handle<Map> map); | 5831   static inline Handle<String> ExpectedTransitionKey(Handle<Map> map); | 
| 5829   static inline Handle<Map> ExpectedTransitionTarget(Handle<Map> map); | 5832   static inline Handle<Map> ExpectedTransitionTarget(Handle<Map> map); | 
| 5830 | 5833 | 
| 5831   // Try to follow an existing transition to a field with attributes NONE. The | 5834   // Try to follow an existing transition to a field with attributes NONE. The | 
| 5832   // return value indicates whether the transition was successful. | 5835   // return value indicates whether the transition was successful. | 
| 5833   static inline Handle<Map> FindTransitionToField(Handle<Map> map, | 5836   static inline Handle<Map> FindTransitionToField(Handle<Map> map, | 
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5951     cache->set(kProtoTransitionNumberOfEntriesOffset, Smi::FromInt(value)); | 5954     cache->set(kProtoTransitionNumberOfEntriesOffset, Smi::FromInt(value)); | 
| 5952   } | 5955   } | 
| 5953 | 5956 | 
| 5954   // Lookup in the map's instance descriptors and fill out the result | 5957   // Lookup in the map's instance descriptors and fill out the result | 
| 5955   // with the given holder if the name is found. The holder may be | 5958   // with the given holder if the name is found. The holder may be | 
| 5956   // NULL when this function is used from the compiler. | 5959   // NULL when this function is used from the compiler. | 
| 5957   inline void LookupDescriptor(JSObject* holder, | 5960   inline void LookupDescriptor(JSObject* holder, | 
| 5958                                Name* name, | 5961                                Name* name, | 
| 5959                                LookupResult* result); | 5962                                LookupResult* result); | 
| 5960 | 5963 | 
| 5961   inline void LookupTransition(JSObject* holder, | 5964   inline void LookupTransition(JSObject* holder, Name* name, | 
| 5962                                Name* name, | 5965                                PropertyAttributes attributes, | 
| 5963                                LookupResult* result); | 5966                                LookupResult* result); | 
| 5964 | 5967 | 
| 5965   inline PropertyDetails GetLastDescriptorDetails(); | 5968   inline PropertyDetails GetLastDescriptorDetails(); | 
| 5966 | 5969 | 
| 5967   // The size of transition arrays are limited so they do not end up in large | 5970   // The size of transition arrays are limited so they do not end up in large | 
| 5968   // object space. Otherwise ClearNonLiveTransitions would leak memory while | 5971   // object space. Otherwise ClearNonLiveTransitions would leak memory while | 
| 5969   // applying in-place right trimming. | 5972   // applying in-place right trimming. | 
| 5970   inline bool CanHaveMoreTransitions(); | 5973   inline bool CanHaveMoreTransitions(); | 
| 5971 | 5974 | 
| 5972   int LastAdded() { | 5975   int LastAdded() { | 
| (...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 6322   static Handle<Map> ShareDescriptor(Handle<Map> map, | 6325   static Handle<Map> ShareDescriptor(Handle<Map> map, | 
| 6323                                      Handle<DescriptorArray> descriptors, | 6326                                      Handle<DescriptorArray> descriptors, | 
| 6324                                      Descriptor* descriptor); | 6327                                      Descriptor* descriptor); | 
| 6325   static Handle<Map> CopyInstallDescriptors( | 6328   static Handle<Map> CopyInstallDescriptors( | 
| 6326       Handle<Map> map, | 6329       Handle<Map> map, | 
| 6327       int new_descriptor, | 6330       int new_descriptor, | 
| 6328       Handle<DescriptorArray> descriptors); | 6331       Handle<DescriptorArray> descriptors); | 
| 6329   static Handle<Map> CopyAddDescriptor(Handle<Map> map, | 6332   static Handle<Map> CopyAddDescriptor(Handle<Map> map, | 
| 6330                                        Descriptor* descriptor, | 6333                                        Descriptor* descriptor, | 
| 6331                                        TransitionFlag flag); | 6334                                        TransitionFlag flag); | 
| 6332   static Handle<Map> CopyReplaceDescriptors( | 6335   static Handle<Map> CopyReplaceDescriptors(Handle<Map> map, | 
| 6333       Handle<Map> map, | 6336                                             Handle<DescriptorArray> descriptors, | 
| 6334       Handle<DescriptorArray> descriptors, | 6337                                             TransitionFlag flag, | 
| 6335       TransitionFlag flag, | 6338                                             MaybeHandle<Name> maybe_name, | 
| 6336       MaybeHandle<Name> maybe_name, | 6339                                             SimpleTransitionFlag simple_flag); | 
| 6337       SimpleTransitionFlag simple_flag = FULL_TRANSITION); |  | 
| 6338   static Handle<Map> CopyReplaceDescriptor(Handle<Map> map, | 6340   static Handle<Map> CopyReplaceDescriptor(Handle<Map> map, | 
| 6339                                            Handle<DescriptorArray> descriptors, | 6341                                            Handle<DescriptorArray> descriptors, | 
| 6340                                            Descriptor* descriptor, | 6342                                            Descriptor* descriptor, | 
| 6341                                            int index, | 6343                                            int index, | 
| 6342                                            TransitionFlag flag); | 6344                                            TransitionFlag flag); | 
| 6343 | 6345 | 
| 6344   static Handle<Map> CopyNormalized(Handle<Map> map, | 6346   static Handle<Map> CopyNormalized(Handle<Map> map, | 
| 6345                                     PropertyNormalizationMode mode); | 6347                                     PropertyNormalizationMode mode); | 
| 6346 | 6348 | 
| 6347   // Fires when the layout of an object with a leaf map changes. | 6349   // Fires when the layout of an object with a leaf map changes. | 
| 6348   // This includes adding transitions to the leaf map or changing | 6350   // This includes adding transitions to the leaf map or changing | 
| 6349   // the descriptor array. | 6351   // the descriptor array. | 
| 6350   inline void NotifyLeafMapLayoutChange(); | 6352   inline void NotifyLeafMapLayoutChange(); | 
| 6351 | 6353 | 
| 6352   static Handle<Map> TransitionElementsToSlow(Handle<Map> object, | 6354   static Handle<Map> TransitionElementsToSlow(Handle<Map> object, | 
| 6353                                               ElementsKind to_kind); | 6355                                               ElementsKind to_kind); | 
| 6354 | 6356 | 
| 6355   // Zaps the contents of backing data structures. Note that the | 6357   // Zaps the contents of backing data structures. Note that the | 
| 6356   // heap verifier (i.e. VerifyMarkingVisitor) relies on zapping of objects | 6358   // heap verifier (i.e. VerifyMarkingVisitor) relies on zapping of objects | 
| 6357   // holding weak references when incremental marking is used, because it also | 6359   // holding weak references when incremental marking is used, because it also | 
| 6358   // iterates over objects that are otherwise unreachable. | 6360   // iterates over objects that are otherwise unreachable. | 
| 6359   // In general we only want to call these functions in release mode when | 6361   // In general we only want to call these functions in release mode when | 
| 6360   // heap verification is turned on. | 6362   // heap verification is turned on. | 
| 6361   void ZapPrototypeTransitions(); | 6363   void ZapPrototypeTransitions(); | 
| 6362   void ZapTransitions(); | 6364   void ZapTransitions(); | 
| 6363 | 6365 | 
| 6364   void DeprecateTransitionTree(); | 6366   void DeprecateTransitionTree(); | 
| 6365   void DeprecateTarget(Name* key, DescriptorArray* new_descriptors); | 6367   void DeprecateTarget(PropertyType type, Name* key, | 
|  | 6368                        PropertyAttributes attributes, | 
|  | 6369                        DescriptorArray* new_descriptors); | 
| 6366 | 6370 | 
| 6367   Map* FindLastMatchMap(int verbatim, int length, DescriptorArray* descriptors); | 6371   Map* FindLastMatchMap(int verbatim, int length, DescriptorArray* descriptors); | 
| 6368 | 6372 | 
| 6369   void UpdateFieldType(int descriptor_number, Handle<Name> name, | 6373   void UpdateFieldType(int descriptor_number, Handle<Name> name, | 
| 6370                        Handle<HeapType> new_type); | 6374                        Handle<HeapType> new_type); | 
| 6371 | 6375 | 
| 6372   void PrintGeneralization(FILE* file, | 6376   void PrintGeneralization(FILE* file, | 
| 6373                            const char* reason, | 6377                            const char* reason, | 
| 6374                            int modify_index, | 6378                            int modify_index, | 
| 6375                            int split, | 6379                            int split, | 
| (...skipping 4553 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 10929     } else { | 10933     } else { | 
| 10930       value &= ~(1 << bit_position); | 10934       value &= ~(1 << bit_position); | 
| 10931     } | 10935     } | 
| 10932     return value; | 10936     return value; | 
| 10933   } | 10937   } | 
| 10934 }; | 10938 }; | 
| 10935 | 10939 | 
| 10936 } }  // namespace v8::internal | 10940 } }  // namespace v8::internal | 
| 10937 | 10941 | 
| 10938 #endif  // V8_OBJECTS_H_ | 10942 #endif  // V8_OBJECTS_H_ | 
| OLD | NEW | 
|---|