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

Side by Side Diff: src/objects.h

Issue 661133002: TransitionArray now uses <is_data_property, name, attributes> tuple as a key, which allows to have … (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressed comments Created 6 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « src/hydrogen.cc ('k') | src/objects.cc » ('j') | no next file with comments »
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 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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_
OLDNEW
« no previous file with comments | « src/hydrogen.cc ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698