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

Side by Side Diff: src/objects.h

Issue 722873004: Revert "TransitionArray now uses <is_data_property, name, attributes> tuple as a key, which allows … (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: 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
« 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 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 { 283 enum SimpleTransitionFlag { SIMPLE_TRANSITION, FULL_TRANSITION };
284 SIMPLE_PROPERTY_TRANSITION,
285 PROPERTY_TRANSITION,
286 SPECIAL_TRANSITION
287 };
288 284
289 285
290 // Indicates whether we are only interested in the descriptors of a particular 286 // Indicates whether we are only interested in the descriptors of a particular
291 // map, or in all descriptors in the descriptor array. 287 // map, or in all descriptors in the descriptor array.
292 enum DescriptorFlag { 288 enum DescriptorFlag {
293 ALL_DESCRIPTORS, 289 ALL_DESCRIPTORS,
294 OWN_DESCRIPTORS 290 OWN_DESCRIPTORS
295 }; 291 };
296 292
297 // The GC maintains a bit of information, the MarkingParity, which toggles 293 // The GC maintains a bit of information, the MarkingParity, which toggles
(...skipping 5488 matching lines...) Expand 10 before | Expand all | Expand 10 after
5786 5782
5787 // Returns true if the current map doesn't have DICTIONARY_ELEMENTS but if a 5783 // Returns true if the current map doesn't have DICTIONARY_ELEMENTS but if a
5788 // map with DICTIONARY_ELEMENTS was found in the prototype chain. 5784 // map with DICTIONARY_ELEMENTS was found in the prototype chain.
5789 bool DictionaryElementsInPrototypeChainOnly(); 5785 bool DictionaryElementsInPrototypeChainOnly();
5790 5786
5791 inline bool HasTransitionArray() const; 5787 inline bool HasTransitionArray() const;
5792 inline bool HasElementsTransition(); 5788 inline bool HasElementsTransition();
5793 inline Map* elements_transition_map(); 5789 inline Map* elements_transition_map();
5794 5790
5795 inline Map* GetTransition(int transition_index); 5791 inline Map* GetTransition(int transition_index);
5796 inline int SearchSpecialTransition(Symbol* name); 5792 inline int SearchTransition(Name* name);
5797 inline int SearchTransition(PropertyType type, Name* name,
5798 PropertyAttributes attributes);
5799 inline FixedArrayBase* GetInitialElements(); 5793 inline FixedArrayBase* GetInitialElements();
5800 5794
5801 DECL_ACCESSORS(transitions, TransitionArray) 5795 DECL_ACCESSORS(transitions, TransitionArray)
5802 5796
5803 static inline Handle<String> ExpectedTransitionKey(Handle<Map> map); 5797 static inline Handle<String> ExpectedTransitionKey(Handle<Map> map);
5804 static inline Handle<Map> ExpectedTransitionTarget(Handle<Map> map); 5798 static inline Handle<Map> ExpectedTransitionTarget(Handle<Map> map);
5805 5799
5806 // Try to follow an existing transition to a field with attributes NONE. The 5800 // Try to follow an existing transition to a field with attributes NONE. The
5807 // return value indicates whether the transition was successful. 5801 // return value indicates whether the transition was successful.
5808 static inline Handle<Map> FindTransitionToField(Handle<Map> map, 5802 static inline Handle<Map> FindTransitionToField(Handle<Map> map,
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
5942 } 5936 }
5943 5937
5944 // Lookup in the map's instance descriptors and fill out the result 5938 // Lookup in the map's instance descriptors and fill out the result
5945 // with the given holder if the name is found. The holder may be 5939 // with the given holder if the name is found. The holder may be
5946 // NULL when this function is used from the compiler. 5940 // NULL when this function is used from the compiler.
5947 inline void LookupDescriptor(JSObject* holder, 5941 inline void LookupDescriptor(JSObject* holder,
5948 Name* name, 5942 Name* name,
5949 LookupResult* result); 5943 LookupResult* result);
5950 5944
5951 inline void LookupTransition(JSObject* holder, Name* name, 5945 inline void LookupTransition(JSObject* holder, Name* name,
5952 PropertyAttributes attributes,
5953 LookupResult* result); 5946 LookupResult* result);
5954 5947
5955 inline PropertyDetails GetLastDescriptorDetails(); 5948 inline PropertyDetails GetLastDescriptorDetails();
5956 5949
5957 // The size of transition arrays are limited so they do not end up in large 5950 // The size of transition arrays are limited so they do not end up in large
5958 // object space. Otherwise ClearNonLiveTransitions would leak memory while 5951 // object space. Otherwise ClearNonLiveTransitions would leak memory while
5959 // applying in-place right trimming. 5952 // applying in-place right trimming.
5960 inline bool CanHaveMoreTransitions(); 5953 inline bool CanHaveMoreTransitions();
5961 5954
5962 int LastAdded() { 5955 int LastAdded() {
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after
6333 static Handle<Map> CopyInstallDescriptors( 6326 static Handle<Map> CopyInstallDescriptors(
6334 Handle<Map> map, int new_descriptor, Handle<DescriptorArray> descriptors, 6327 Handle<Map> map, int new_descriptor, Handle<DescriptorArray> descriptors,
6335 Handle<LayoutDescriptor> layout_descriptor); 6328 Handle<LayoutDescriptor> layout_descriptor);
6336 static Handle<Map> CopyAddDescriptor(Handle<Map> map, 6329 static Handle<Map> CopyAddDescriptor(Handle<Map> map,
6337 Descriptor* descriptor, 6330 Descriptor* descriptor,
6338 TransitionFlag flag); 6331 TransitionFlag flag);
6339 static Handle<Map> CopyReplaceDescriptors( 6332 static Handle<Map> CopyReplaceDescriptors(
6340 Handle<Map> map, Handle<DescriptorArray> descriptors, 6333 Handle<Map> map, Handle<DescriptorArray> descriptors,
6341 Handle<LayoutDescriptor> layout_descriptor, TransitionFlag flag, 6334 Handle<LayoutDescriptor> layout_descriptor, TransitionFlag flag,
6342 MaybeHandle<Name> maybe_name, const char* reason, 6335 MaybeHandle<Name> maybe_name, const char* reason,
6343 SimpleTransitionFlag simple_flag); 6336 SimpleTransitionFlag simple_flag = FULL_TRANSITION);
6344
6345 static Handle<Map> CopyReplaceDescriptor(Handle<Map> map, 6337 static Handle<Map> CopyReplaceDescriptor(Handle<Map> map,
6346 Handle<DescriptorArray> descriptors, 6338 Handle<DescriptorArray> descriptors,
6347 Descriptor* descriptor, 6339 Descriptor* descriptor,
6348 int index, 6340 int index,
6349 TransitionFlag flag); 6341 TransitionFlag flag);
6350 6342
6351 static Handle<Map> CopyNormalized(Handle<Map> map, 6343 static Handle<Map> CopyNormalized(Handle<Map> map,
6352 PropertyNormalizationMode mode); 6344 PropertyNormalizationMode mode);
6353 6345
6354 // Fires when the layout of an object with a leaf map changes. 6346 // Fires when the layout of an object with a leaf map changes.
6355 // This includes adding transitions to the leaf map or changing 6347 // This includes adding transitions to the leaf map or changing
6356 // the descriptor array. 6348 // the descriptor array.
6357 inline void NotifyLeafMapLayoutChange(); 6349 inline void NotifyLeafMapLayoutChange();
6358 6350
6359 static Handle<Map> TransitionElementsToSlow(Handle<Map> object, 6351 static Handle<Map> TransitionElementsToSlow(Handle<Map> object,
6360 ElementsKind to_kind); 6352 ElementsKind to_kind);
6361 6353
6362 // Zaps the contents of backing data structures. Note that the 6354 // Zaps the contents of backing data structures. Note that the
6363 // heap verifier (i.e. VerifyMarkingVisitor) relies on zapping of objects 6355 // heap verifier (i.e. VerifyMarkingVisitor) relies on zapping of objects
6364 // holding weak references when incremental marking is used, because it also 6356 // holding weak references when incremental marking is used, because it also
6365 // iterates over objects that are otherwise unreachable. 6357 // iterates over objects that are otherwise unreachable.
6366 // In general we only want to call these functions in release mode when 6358 // In general we only want to call these functions in release mode when
6367 // heap verification is turned on. 6359 // heap verification is turned on.
6368 void ZapPrototypeTransitions(); 6360 void ZapPrototypeTransitions();
6369 void ZapTransitions(); 6361 void ZapTransitions();
6370 6362
6371 void DeprecateTransitionTree(); 6363 void DeprecateTransitionTree();
6372 void DeprecateTarget(PropertyType type, Name* key, 6364 void DeprecateTarget(Name* key, DescriptorArray* new_descriptors,
6373 PropertyAttributes attributes,
6374 DescriptorArray* new_descriptors,
6375 LayoutDescriptor* new_layout_descriptor); 6365 LayoutDescriptor* new_layout_descriptor);
6376 6366
6377 Map* FindLastMatchMap(int verbatim, int length, DescriptorArray* descriptors); 6367 Map* FindLastMatchMap(int verbatim, int length, DescriptorArray* descriptors);
6378 6368
6379 void UpdateFieldType(int descriptor_number, Handle<Name> name, 6369 void UpdateFieldType(int descriptor_number, Handle<Name> name,
6380 Representation new_representation, 6370 Representation new_representation,
6381 Handle<HeapType> new_type); 6371 Handle<HeapType> new_type);
6382 6372
6383 void PrintGeneralization(FILE* file, 6373 void PrintGeneralization(FILE* file,
6384 const char* reason, 6374 const char* reason,
(...skipping 4583 matching lines...) Expand 10 before | Expand all | Expand 10 after
10968 } else { 10958 } else {
10969 value &= ~(1 << bit_position); 10959 value &= ~(1 << bit_position);
10970 } 10960 }
10971 return value; 10961 return value;
10972 } 10962 }
10973 }; 10963 };
10974 10964
10975 } } // namespace v8::internal 10965 } } // namespace v8::internal
10976 10966
10977 #endif // V8_OBJECTS_H_ 10967 #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