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

Side by Side Diff: src/objects.h

Issue 14146005: Track representations of fields (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Add test for tracking fields Created 7 years, 8 months 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/json-parser.h ('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 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 1042 matching lines...) Expand 10 before | Expand all | Expand 10 after
1053 inline bool IsArgumentsMarker(); 1053 inline bool IsArgumentsMarker();
1054 inline bool NonFailureIsHeapObject(); 1054 inline bool NonFailureIsHeapObject();
1055 1055
1056 // Filler objects (fillers and free space objects). 1056 // Filler objects (fillers and free space objects).
1057 inline bool IsFiller(); 1057 inline bool IsFiller();
1058 1058
1059 // Extract the number. 1059 // Extract the number.
1060 inline double Number(); 1060 inline double Number();
1061 inline bool IsNaN(); 1061 inline bool IsNaN();
1062 1062
1063 inline Representation OptimalRepresentation() {
1064 if (FLAG_track_fields && IsSmi()) {
1065 return Representation::Smi();
1066 } else if (FLAG_track_double_fields && IsHeapNumber()) {
1067 return Representation::Double();
1068 } else {
1069 return Representation::Tagged();
1070 }
1071 }
1072
1073 inline bool FitsRepresentation(Representation representation) {
1074 if (FLAG_track_fields && representation.IsSmi()) {
1075 return IsSmi();
1076 } else if (FLAG_track_double_fields && representation.IsDouble()) {
1077 return IsNumber();
1078 }
1079 return true;
1080 }
1081
1063 // Returns true if the object is of the correct type to be used as a 1082 // Returns true if the object is of the correct type to be used as a
1064 // implementation of a JSObject's elements. 1083 // implementation of a JSObject's elements.
1065 inline bool HasValidElements(); 1084 inline bool HasValidElements();
1066 1085
1067 inline bool HasSpecificClassOf(String* name); 1086 inline bool HasSpecificClassOf(String* name);
1068 1087
1069 MUST_USE_RESULT MaybeObject* ToObject(); // ECMA-262 9.9. 1088 MUST_USE_RESULT MaybeObject* ToObject(); // ECMA-262 9.9.
1070 bool BooleanValue(); // ECMA-262 9.2. 1089 bool BooleanValue(); // ECMA-262 9.2.
1071 1090
1072 // Convert to a JSObject if needed. 1091 // Convert to a JSObject if needed.
(...skipping 726 matching lines...) Expand 10 before | Expand all | Expand 10 after
1799 1818
1800 // Try to follow an existing transition to a field with attributes NONE. The 1819 // Try to follow an existing transition to a field with attributes NONE. The
1801 // return value indicates whether the transition was successful. 1820 // return value indicates whether the transition was successful.
1802 static inline Handle<Map> FindTransitionToField(Handle<Map> map, 1821 static inline Handle<Map> FindTransitionToField(Handle<Map> map,
1803 Handle<Name> key); 1822 Handle<Name> key);
1804 1823
1805 inline int LastAddedFieldIndex(); 1824 inline int LastAddedFieldIndex();
1806 1825
1807 // Extend the receiver with a single fast property appeared first in the 1826 // Extend the receiver with a single fast property appeared first in the
1808 // passed map. This also extends the property backing store if necessary. 1827 // passed map. This also extends the property backing store if necessary.
1809 static void AddFastPropertyUsingMap(Handle<JSObject> object, Handle<Map> map);
1810 inline MUST_USE_RESULT MaybeObject* AddFastPropertyUsingMap(Map* map);
1811 static void TransitionToMap(Handle<JSObject> object, Handle<Map> map); 1828 static void TransitionToMap(Handle<JSObject> object, Handle<Map> map);
1812 inline MUST_USE_RESULT MaybeObject* TransitionToMap(Map* map); 1829 inline MUST_USE_RESULT MaybeObject* TransitionToMap(Map* map);
1813 1830
1831 static void MigrateInstance(Handle<JSObject> instance);
1832 inline MUST_USE_RESULT MaybeObject* MigrateInstance();
1833
1814 // Can cause GC. 1834 // Can cause GC.
1815 MUST_USE_RESULT MaybeObject* SetLocalPropertyIgnoreAttributes( 1835 MUST_USE_RESULT MaybeObject* SetLocalPropertyIgnoreAttributes(
1816 Name* key, 1836 Name* key,
1817 Object* value, 1837 Object* value,
1818 PropertyAttributes attributes); 1838 PropertyAttributes attributes);
1819 1839
1820 // Retrieve a value in a normalized object given a lookup result. 1840 // Retrieve a value in a normalized object given a lookup result.
1821 // Handles the special representation of JS global objects. 1841 // Handles the special representation of JS global objects.
1822 Object* GetNormalizedProperty(LookupResult* result); 1842 Object* GetNormalizedProperty(LookupResult* result);
1823 1843
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
2157 Object* new_value, 2177 Object* new_value,
2158 PropertyAttributes attributes); 2178 PropertyAttributes attributes);
2159 2179
2160 // Converts a descriptor of any other type to a real field, backed by the 2180 // Converts a descriptor of any other type to a real field, backed by the
2161 // properties array. 2181 // properties array.
2162 MUST_USE_RESULT MaybeObject* ConvertDescriptorToField( 2182 MUST_USE_RESULT MaybeObject* ConvertDescriptorToField(
2163 Name* name, 2183 Name* name,
2164 Object* new_value, 2184 Object* new_value,
2165 PropertyAttributes attributes); 2185 PropertyAttributes attributes);
2166 2186
2187 MUST_USE_RESULT MaybeObject* MigrateToMap(Map* new_map);
2188 MUST_USE_RESULT MaybeObject* GeneralizeFieldRepresentation(
2189 int modify_index,
2190 Representation new_representation);
2191
2167 // Add a property to a fast-case object. 2192 // Add a property to a fast-case object.
2168 MUST_USE_RESULT MaybeObject* AddFastProperty( 2193 MUST_USE_RESULT MaybeObject* AddFastProperty(
2169 Name* name, 2194 Name* name,
2170 Object* value, 2195 Object* value,
2171 PropertyAttributes attributes, 2196 PropertyAttributes attributes,
2172 StoreFromKeyed store_mode = MAY_BE_STORE_FROM_KEYED); 2197 StoreFromKeyed store_mode = MAY_BE_STORE_FROM_KEYED);
2173 2198
2174 // Add a property to a slow-case object. 2199 // Add a property to a slow-case object.
2175 MUST_USE_RESULT MaybeObject* AddSlowProperty(Name* name, 2200 MUST_USE_RESULT MaybeObject* AddSlowProperty(Name* name,
2176 Object* value, 2201 Object* value,
(...skipping 569 matching lines...) Expand 10 before | Expand all | Expand 10 after
2746 inline PropertyDetails GetDetails(int descriptor_number); 2771 inline PropertyDetails GetDetails(int descriptor_number);
2747 inline PropertyType GetType(int descriptor_number); 2772 inline PropertyType GetType(int descriptor_number);
2748 inline int GetFieldIndex(int descriptor_number); 2773 inline int GetFieldIndex(int descriptor_number);
2749 inline JSFunction* GetConstantFunction(int descriptor_number); 2774 inline JSFunction* GetConstantFunction(int descriptor_number);
2750 inline Object* GetCallbacksObject(int descriptor_number); 2775 inline Object* GetCallbacksObject(int descriptor_number);
2751 inline AccessorDescriptor* GetCallbacks(int descriptor_number); 2776 inline AccessorDescriptor* GetCallbacks(int descriptor_number);
2752 2777
2753 inline Name* GetSortedKey(int descriptor_number); 2778 inline Name* GetSortedKey(int descriptor_number);
2754 inline int GetSortedKeyIndex(int descriptor_number); 2779 inline int GetSortedKeyIndex(int descriptor_number);
2755 inline void SetSortedKey(int pointer, int descriptor_number); 2780 inline void SetSortedKey(int pointer, int descriptor_number);
2781 inline void InitializeRepresentations(Representation representation);
2782 inline void SetRepresentation(int descriptor_number,
2783 Representation representation);
2756 2784
2757 // Accessor for complete descriptor. 2785 // Accessor for complete descriptor.
2758 inline void Get(int descriptor_number, Descriptor* desc); 2786 inline void Get(int descriptor_number, Descriptor* desc);
2759 inline void Set(int descriptor_number, 2787 inline void Set(int descriptor_number,
2760 Descriptor* desc, 2788 Descriptor* desc,
2761 const WhitenessWitness&); 2789 const WhitenessWitness&);
2762 inline void Set(int descriptor_number, Descriptor* desc); 2790 inline void Set(int descriptor_number, Descriptor* desc);
2763 2791
2764 // Append automatically sets the enumeration index. This should only be used 2792 // Append automatically sets the enumeration index. This should only be used
2765 // to add descriptors in bulk at the end, followed by sorting the descriptor 2793 // to add descriptors in bulk at the end, followed by sorting the descriptor
2766 // array. 2794 // array.
2767 inline void Append(Descriptor* desc, const WhitenessWitness&); 2795 inline void Append(Descriptor* desc, const WhitenessWitness&);
2768 inline void Append(Descriptor* desc); 2796 inline void Append(Descriptor* desc);
2769 2797
2770 // Transfer a complete descriptor from the src descriptor array to this 2798 // Transfer a complete descriptor from the src descriptor array to this
2771 // descriptor array. 2799 // descriptor array.
2772 void CopyFrom(int dst_index, 2800 void CopyFrom(int dst_index,
2773 DescriptorArray* src, 2801 DescriptorArray* src,
2774 int src_index, 2802 int src_index,
2775 const WhitenessWitness&); 2803 const WhitenessWitness&);
2804 MUST_USE_RESULT MaybeObject* Merge(int verbatim,
2805 int valid,
2806 int new_size,
2807 DescriptorArray* other);
2776 2808
2777 MUST_USE_RESULT MaybeObject* CopyUpTo(int enumeration_index); 2809 MUST_USE_RESULT MaybeObject* CopyUpTo(int enumeration_index);
2778 2810
2779 // Sort the instance descriptors by the hash codes of their keys. 2811 // Sort the instance descriptors by the hash codes of their keys.
2780 void Sort(); 2812 void Sort();
2781 2813
2782 // Search the instance descriptors for given name. 2814 // Search the instance descriptors for given name.
2783 INLINE(int Search(Name* name, int number_of_own_descriptors)); 2815 INLINE(int Search(Name* name, int number_of_own_descriptors));
2784 2816
2785 // As the above, but uses DescriptorLookupCache and updates it when 2817 // As the above, but uses DescriptorLookupCache and updates it when
(...skipping 2096 matching lines...) Expand 10 before | Expand all | Expand 10 after
4882 // All code indexes used in the class are counted starting from the first 4914 // All code indexes used in the class are counted starting from the first
4883 // code object of the first group. In other words, code index 0 corresponds 4915 // code object of the first group. In other words, code index 0 corresponds
4884 // to array index n = kCodesStartIndex. 4916 // to array index n = kCodesStartIndex.
4885 4917
4886 class DependentCode: public FixedArray { 4918 class DependentCode: public FixedArray {
4887 public: 4919 public:
4888 enum DependencyGroup { 4920 enum DependencyGroup {
4889 // Group of code that weakly embed this map and depend on being 4921 // Group of code that weakly embed this map and depend on being
4890 // deoptimized when the map is garbage collected. 4922 // deoptimized when the map is garbage collected.
4891 kWeaklyEmbeddedGroup, 4923 kWeaklyEmbeddedGroup,
4924 // Group of code that embed a transition to this map, and depend on being
4925 // deoptimized when the transition is replaced by a new version.
4926 kTransitionGroup,
4892 // Group of code that omit run-time prototype checks for prototypes 4927 // Group of code that omit run-time prototype checks for prototypes
4893 // described by this map. The group is deoptimized whenever an object 4928 // described by this map. The group is deoptimized whenever an object
4894 // described by this map changes shape (and transitions to a new map), 4929 // described by this map changes shape (and transitions to a new map),
4895 // possibly invalidating the assumptions embedded in the code. 4930 // possibly invalidating the assumptions embedded in the code.
4896 kPrototypeCheckGroup, 4931 kPrototypeCheckGroup,
4897 kGroupCount = kPrototypeCheckGroup + 1 4932 kGroupCount = kPrototypeCheckGroup + 1
4898 }; 4933 };
4899 4934
4900 // Array for holding the index of the first code object of each group. 4935 // Array for holding the index of the first code object of each group.
4901 // The last element stores the total number of code objects. 4936 // The last element stores the total number of code objects.
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
4975 inline int bit_field3(); 5010 inline int bit_field3();
4976 inline void set_bit_field3(int value); 5011 inline void set_bit_field3(int value);
4977 5012
4978 class EnumLengthBits: public BitField<int, 0, 11> {}; 5013 class EnumLengthBits: public BitField<int, 0, 11> {};
4979 class NumberOfOwnDescriptorsBits: public BitField<int, 11, 11> {}; 5014 class NumberOfOwnDescriptorsBits: public BitField<int, 11, 11> {};
4980 class IsShared: public BitField<bool, 22, 1> {}; 5015 class IsShared: public BitField<bool, 22, 1> {};
4981 class FunctionWithPrototype: public BitField<bool, 23, 1> {}; 5016 class FunctionWithPrototype: public BitField<bool, 23, 1> {};
4982 class DictionaryMap: public BitField<bool, 24, 1> {}; 5017 class DictionaryMap: public BitField<bool, 24, 1> {};
4983 class OwnsDescriptors: public BitField<bool, 25, 1> {}; 5018 class OwnsDescriptors: public BitField<bool, 25, 1> {};
4984 class IsObserved: public BitField<bool, 26, 1> {}; 5019 class IsObserved: public BitField<bool, 26, 1> {};
5020 class Deprecated: public BitField<bool, 27, 1> {};
4985 5021
4986 // Tells whether the object in the prototype property will be used 5022 // Tells whether the object in the prototype property will be used
4987 // for instances created from this function. If the prototype 5023 // for instances created from this function. If the prototype
4988 // property is set to a value that is not a JSObject, the prototype 5024 // property is set to a value that is not a JSObject, the prototype
4989 // property will not be used to create instances of the function. 5025 // property will not be used to create instances of the function.
4990 // See ECMA-262, 13.2.2. 5026 // See ECMA-262, 13.2.2.
4991 inline void set_non_instance_prototype(bool value); 5027 inline void set_non_instance_prototype(bool value);
4992 inline bool has_non_instance_prototype(); 5028 inline bool has_non_instance_prototype();
4993 5029
4994 // Tells whether function has special prototype property. If not, prototype 5030 // Tells whether function has special prototype property. If not, prototype
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
5117 Map* transitioned_map); 5153 Map* transitioned_map);
5118 inline void SetTransition(int transition_index, Map* target); 5154 inline void SetTransition(int transition_index, Map* target);
5119 inline Map* GetTransition(int transition_index); 5155 inline Map* GetTransition(int transition_index);
5120 MUST_USE_RESULT inline MaybeObject* AddTransition(Name* key, 5156 MUST_USE_RESULT inline MaybeObject* AddTransition(Name* key,
5121 Map* target, 5157 Map* target,
5122 SimpleTransitionFlag flag); 5158 SimpleTransitionFlag flag);
5123 DECL_ACCESSORS(transitions, TransitionArray) 5159 DECL_ACCESSORS(transitions, TransitionArray)
5124 inline void ClearTransitions(Heap* heap, 5160 inline void ClearTransitions(Heap* heap,
5125 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); 5161 WriteBarrierMode mode = UPDATE_WRITE_BARRIER);
5126 5162
5163 void DeprecateTransitionTree();
5164 void DeprecateTarget(Name* key, DescriptorArray* new_descriptors);
5165
5166 Map* FindRootMap();
5167 Map* FindUpdatedMap(int verbatim, int length, DescriptorArray* descriptors);
5168 Map* FindLastMatchMap(int verbatim, int length, DescriptorArray* descriptors);
5169
5170 int NumberOfFields();
5171
5172 bool InstancesNeedRewriting(int target_number_of_fields,
5173 int target_inobject,
5174 int target_unused);
5175 static Handle<Map> GeneralizeRepresentation(
5176 Handle<Map> map,
5177 int modify_index,
5178 Representation new_representation);
5179 MUST_USE_RESULT MaybeObject* GeneralizeRepresentation(
5180 int modify_index,
5181 Representation representation);
5182 MUST_USE_RESULT MaybeObject* CopyGeneralizeAllRepresentations();
5183
5127 // Tells whether the map is attached to SharedFunctionInfo 5184 // Tells whether the map is attached to SharedFunctionInfo
5128 // (for inobject slack tracking). 5185 // (for inobject slack tracking).
5129 inline void set_attached_to_shared_function_info(bool value); 5186 inline void set_attached_to_shared_function_info(bool value);
5130 5187
5131 inline bool attached_to_shared_function_info(); 5188 inline bool attached_to_shared_function_info();
5132 5189
5133 // Tells whether the map is shared between objects that may have different 5190 // Tells whether the map is shared between objects that may have different
5134 // behavior. If true, the map should never be modified, instead a clone 5191 // behavior. If true, the map should never be modified, instead a clone
5135 // should be created and modified. 5192 // should be created and modified.
5136 inline void set_is_shared(bool value); 5193 inline void set_is_shared(bool value);
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
5255 ASSERT(length <= NumberOfOwnDescriptors()); 5312 ASSERT(length <= NumberOfOwnDescriptors());
5256 } 5313 }
5257 set_bit_field3(EnumLengthBits::update(bit_field3(), length)); 5314 set_bit_field3(EnumLengthBits::update(bit_field3(), length));
5258 } 5315 }
5259 5316
5260 inline bool CanTrackAllocationSite(); 5317 inline bool CanTrackAllocationSite();
5261 inline bool owns_descriptors(); 5318 inline bool owns_descriptors();
5262 inline void set_owns_descriptors(bool is_shared); 5319 inline void set_owns_descriptors(bool is_shared);
5263 inline bool is_observed(); 5320 inline bool is_observed();
5264 inline void set_is_observed(bool is_observed); 5321 inline void set_is_observed(bool is_observed);
5322 inline void deprecate();
5323 inline bool is_deprecated();
5324 inline bool CanBeDeprecated();
5265 5325
5266 MUST_USE_RESULT MaybeObject* RawCopy(int instance_size); 5326 MUST_USE_RESULT MaybeObject* RawCopy(int instance_size);
5267 MUST_USE_RESULT MaybeObject* CopyWithPreallocatedFieldDescriptors(); 5327 MUST_USE_RESULT MaybeObject* CopyWithPreallocatedFieldDescriptors();
5268 MUST_USE_RESULT MaybeObject* CopyDropDescriptors(); 5328 MUST_USE_RESULT MaybeObject* CopyDropDescriptors();
5269 MUST_USE_RESULT MaybeObject* CopyReplaceDescriptors( 5329 MUST_USE_RESULT MaybeObject* CopyReplaceDescriptors(
5270 DescriptorArray* descriptors, 5330 DescriptorArray* descriptors,
5271 Name* name, 5331 Name* name,
5272 TransitionFlag flag, 5332 TransitionFlag flag,
5273 int descriptor_index); 5333 int descriptor_index);
5334 MUST_USE_RESULT MaybeObject* CopyInstallDescriptors(
5335 int new_descriptor,
5336 DescriptorArray* descriptors);
5274 MUST_USE_RESULT MaybeObject* ShareDescriptor(DescriptorArray* descriptors, 5337 MUST_USE_RESULT MaybeObject* ShareDescriptor(DescriptorArray* descriptors,
5275 Descriptor* descriptor); 5338 Descriptor* descriptor);
5276 MUST_USE_RESULT MaybeObject* CopyAddDescriptor(Descriptor* descriptor, 5339 MUST_USE_RESULT MaybeObject* CopyAddDescriptor(Descriptor* descriptor,
5277 TransitionFlag flag); 5340 TransitionFlag flag);
5278 MUST_USE_RESULT MaybeObject* CopyInsertDescriptor(Descriptor* descriptor, 5341 MUST_USE_RESULT MaybeObject* CopyInsertDescriptor(Descriptor* descriptor,
5279 TransitionFlag flag); 5342 TransitionFlag flag);
5280 MUST_USE_RESULT MaybeObject* CopyReplaceDescriptor( 5343 MUST_USE_RESULT MaybeObject* CopyReplaceDescriptor(
5281 DescriptorArray* descriptors, 5344 DescriptorArray* descriptors,
5282 Descriptor* descriptor, 5345 Descriptor* descriptor,
5283 int index, 5346 int index,
5284 TransitionFlag flag); 5347 TransitionFlag flag);
5285 MUST_USE_RESULT MaybeObject* AsElementsKind(ElementsKind kind); 5348 MUST_USE_RESULT MaybeObject* AsElementsKind(ElementsKind kind);
5286 MUST_USE_RESULT MaybeObject* CopyAsElementsKind(ElementsKind kind, 5349 MUST_USE_RESULT MaybeObject* CopyAsElementsKind(ElementsKind kind,
5287 TransitionFlag flag); 5350 TransitionFlag flag);
5288 5351
5289 MUST_USE_RESULT MaybeObject* CopyNormalized(PropertyNormalizationMode mode, 5352 MUST_USE_RESULT MaybeObject* CopyNormalized(PropertyNormalizationMode mode,
5290 NormalizedMapSharingMode sharing); 5353 NormalizedMapSharingMode sharing);
5291 5354
5292 inline void AppendDescriptor(Descriptor* desc, 5355 inline void AppendDescriptor(Descriptor* desc,
5293 const DescriptorArray::WhitenessWitness&); 5356 const DescriptorArray::WhitenessWitness&);
5294 5357
5295 // Returns a copy of the map, with all transitions dropped from the 5358 // Returns a copy of the map, with all transitions dropped from the
5296 // instance descriptors. 5359 // instance descriptors.
5297 MUST_USE_RESULT MaybeObject* Copy(); 5360 MUST_USE_RESULT MaybeObject* Copy();
5298 5361
5299 // Returns the property index for name (only valid for FAST MODE).
5300 int PropertyIndexFor(Name* name);
5301
5302 // Returns the next free property index (only valid for FAST MODE). 5362 // Returns the next free property index (only valid for FAST MODE).
5303 int NextFreePropertyIndex(); 5363 int NextFreePropertyIndex();
5304 5364
5305 // Returns the number of properties described in instance_descriptors 5365 // Returns the number of properties described in instance_descriptors
5306 // filtering out properties with the specified attributes. 5366 // filtering out properties with the specified attributes.
5307 int NumberOfDescribedProperties(DescriptorFlag which = OWN_DESCRIPTORS, 5367 int NumberOfDescribedProperties(DescriptorFlag which = OWN_DESCRIPTORS,
5308 PropertyAttributes filter = NONE); 5368 PropertyAttributes filter = NONE);
5309 5369
5310 // Casting. 5370 // Casting.
5311 static inline Map* cast(Object* obj); 5371 static inline Map* cast(Object* obj);
(...skipping 30 matching lines...) Expand all
5342 void RemoveFromCodeCache(Name* name, Code* code, int index); 5402 void RemoveFromCodeCache(Name* name, Code* code, int index);
5343 5403
5344 // Set all map transitions from this map to dead maps to null. Also clear 5404 // Set all map transitions from this map to dead maps to null. Also clear
5345 // back pointers in transition targets so that we do not process this map 5405 // back pointers in transition targets so that we do not process this map
5346 // again while following back pointers. 5406 // again while following back pointers.
5347 void ClearNonLiveTransitions(Heap* heap); 5407 void ClearNonLiveTransitions(Heap* heap);
5348 5408
5349 // Computes a hash value for this map, to be used in HashTables and such. 5409 // Computes a hash value for this map, to be used in HashTables and such.
5350 int Hash(); 5410 int Hash();
5351 5411
5412 bool EquivalentToForTransition(Map* other);
5413
5352 // Compares this map to another to see if they describe equivalent objects. 5414 // Compares this map to another to see if they describe equivalent objects.
5353 // If |mode| is set to CLEAR_INOBJECT_PROPERTIES, |other| is treated as if 5415 // If |mode| is set to CLEAR_INOBJECT_PROPERTIES, |other| is treated as if
5354 // it had exactly zero inobject properties. 5416 // it had exactly zero inobject properties.
5355 // The "shared" flags of both this map and |other| are ignored. 5417 // The "shared" flags of both this map and |other| are ignored.
5356 bool EquivalentToForNormalization(Map* other, PropertyNormalizationMode mode); 5418 bool EquivalentToForNormalization(Map* other, PropertyNormalizationMode mode);
5357 5419
5358 // Returns the map that this map transitions to if its elements_kind 5420 // Returns the map that this map transitions to if its elements_kind
5359 // is changed to |elements_kind|, or NULL if no such map is cached yet. 5421 // is changed to |elements_kind|, or NULL if no such map is cached yet.
5360 // |safe_to_add_transitions| is set to false if adding transitions is not 5422 // |safe_to_add_transitions| is set to false if adding transitions is not
5361 // allowed. 5423 // allowed.
(...skipping 4067 matching lines...) Expand 10 before | Expand all | Expand 10 after
9429 } else { 9491 } else {
9430 value &= ~(1 << bit_position); 9492 value &= ~(1 << bit_position);
9431 } 9493 }
9432 return value; 9494 return value;
9433 } 9495 }
9434 }; 9496 };
9435 9497
9436 } } // namespace v8::internal 9498 } } // namespace v8::internal
9437 9499
9438 #endif // V8_OBJECTS_H_ 9500 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/json-parser.h ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698