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 840 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
851 | 851 |
852 | 852 |
853 class AccessorPair; | 853 class AccessorPair; |
854 class AllocationSite; | 854 class AllocationSite; |
855 class AllocationSiteCreationContext; | 855 class AllocationSiteCreationContext; |
856 class AllocationSiteUsageContext; | 856 class AllocationSiteUsageContext; |
857 class DictionaryElementsAccessor; | 857 class DictionaryElementsAccessor; |
858 class ElementsAccessor; | 858 class ElementsAccessor; |
859 class FixedArrayBase; | 859 class FixedArrayBase; |
860 class GlobalObject; | 860 class GlobalObject; |
| 861 class LayoutDescriptor; |
| 862 class LookupIterator; |
861 class ObjectVisitor; | 863 class ObjectVisitor; |
862 class LookupIterator; | |
863 class StringStream; | 864 class StringStream; |
864 class TypeFeedbackVector; | 865 class TypeFeedbackVector; |
865 class WeakCell; | 866 class WeakCell; |
866 // We cannot just say "class HeapType;" if it is created from a template... =8-? | 867 // We cannot just say "class HeapType;" if it is created from a template... =8-? |
867 template<class> class TypeImpl; | 868 template<class> class TypeImpl; |
868 struct HeapTypeConfig; | 869 struct HeapTypeConfig; |
869 typedef TypeImpl<HeapTypeConfig> HeapType; | 870 typedef TypeImpl<HeapTypeConfig> HeapType; |
870 | 871 |
871 | 872 |
872 // A template-ized version of the IsXXX functions. | 873 // A template-ized version of the IsXXX functions. |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
927 V(FixedFloat32Array) \ | 928 V(FixedFloat32Array) \ |
928 V(FixedFloat64Array) \ | 929 V(FixedFloat64Array) \ |
929 V(FixedUint8ClampedArray) \ | 930 V(FixedUint8ClampedArray) \ |
930 V(ByteArray) \ | 931 V(ByteArray) \ |
931 V(FreeSpace) \ | 932 V(FreeSpace) \ |
932 V(JSReceiver) \ | 933 V(JSReceiver) \ |
933 V(JSObject) \ | 934 V(JSObject) \ |
934 V(JSContextExtensionObject) \ | 935 V(JSContextExtensionObject) \ |
935 V(JSGeneratorObject) \ | 936 V(JSGeneratorObject) \ |
936 V(JSModule) \ | 937 V(JSModule) \ |
| 938 V(LayoutDescriptor) \ |
937 V(Map) \ | 939 V(Map) \ |
938 V(DescriptorArray) \ | 940 V(DescriptorArray) \ |
939 V(TransitionArray) \ | 941 V(TransitionArray) \ |
940 V(TypeFeedbackVector) \ | 942 V(TypeFeedbackVector) \ |
941 V(DeoptimizationInputData) \ | 943 V(DeoptimizationInputData) \ |
942 V(DeoptimizationOutputData) \ | 944 V(DeoptimizationOutputData) \ |
943 V(DependentCode) \ | 945 V(DependentCode) \ |
944 V(FixedArray) \ | 946 V(FixedArray) \ |
945 V(FixedDoubleArray) \ | 947 V(FixedDoubleArray) \ |
946 V(ConstantPoolArray) \ | 948 V(ConstantPoolArray) \ |
(...skipping 1109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2056 | 2058 |
2057 // Convert and update the elements backing store to be a | 2059 // Convert and update the elements backing store to be a |
2058 // SeededNumberDictionary dictionary. Returns the backing after conversion. | 2060 // SeededNumberDictionary dictionary. Returns the backing after conversion. |
2059 static Handle<SeededNumberDictionary> NormalizeElements( | 2061 static Handle<SeededNumberDictionary> NormalizeElements( |
2060 Handle<JSObject> object); | 2062 Handle<JSObject> object); |
2061 | 2063 |
2062 // Transform slow named properties to fast variants. | 2064 // Transform slow named properties to fast variants. |
2063 static void MigrateSlowToFast(Handle<JSObject> object, | 2065 static void MigrateSlowToFast(Handle<JSObject> object, |
2064 int unused_property_fields, const char* reason); | 2066 int unused_property_fields, const char* reason); |
2065 | 2067 |
| 2068 inline bool IsUnboxedDoubleField(FieldIndex index); |
| 2069 |
2066 // Access fast-case object properties at index. | 2070 // Access fast-case object properties at index. |
2067 static Handle<Object> FastPropertyAt(Handle<JSObject> object, | 2071 static Handle<Object> FastPropertyAt(Handle<JSObject> object, |
2068 Representation representation, | 2072 Representation representation, |
2069 FieldIndex index); | 2073 FieldIndex index); |
2070 inline Object* RawFastPropertyAt(FieldIndex index); | 2074 inline Object* RawFastPropertyAt(FieldIndex index); |
| 2075 inline double RawFastDoublePropertyAt(FieldIndex index); |
| 2076 |
2071 inline void FastPropertyAtPut(FieldIndex index, Object* value); | 2077 inline void FastPropertyAtPut(FieldIndex index, Object* value); |
| 2078 inline void RawFastPropertyAtPut(FieldIndex index, Object* value); |
| 2079 inline void RawFastDoublePropertyAtPut(FieldIndex index, double value); |
2072 void WriteToField(int descriptor, Object* value); | 2080 void WriteToField(int descriptor, Object* value); |
2073 | 2081 |
2074 // Access to in object properties. | 2082 // Access to in object properties. |
2075 inline int GetInObjectPropertyOffset(int index); | 2083 inline int GetInObjectPropertyOffset(int index); |
2076 inline Object* InObjectPropertyAt(int index); | 2084 inline Object* InObjectPropertyAt(int index); |
2077 inline Object* InObjectPropertyAtPut(int index, | 2085 inline Object* InObjectPropertyAtPut(int index, |
2078 Object* value, | 2086 Object* value, |
2079 WriteBarrierMode mode | 2087 WriteBarrierMode mode |
2080 = UPDATE_WRITE_BARRIER); | 2088 = UPDATE_WRITE_BARRIER); |
2081 | 2089 |
(...skipping 1043 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3125 } | 3133 } |
3126 | 3134 |
3127 static int ToValueIndex(int descriptor_number) { | 3135 static int ToValueIndex(int descriptor_number) { |
3128 return kFirstIndex + | 3136 return kFirstIndex + |
3129 (descriptor_number * kDescriptorSize) + | 3137 (descriptor_number * kDescriptorSize) + |
3130 kDescriptorValue; | 3138 kDescriptorValue; |
3131 } | 3139 } |
3132 | 3140 |
3133 // Transfer a complete descriptor from the src descriptor array to this | 3141 // Transfer a complete descriptor from the src descriptor array to this |
3134 // descriptor array. | 3142 // descriptor array. |
3135 void CopyFrom(int index, | 3143 void CopyFrom(int index, DescriptorArray* src, const WhitenessWitness&); |
3136 DescriptorArray* src, | |
3137 const WhitenessWitness&); | |
3138 | 3144 |
3139 inline void Set(int descriptor_number, | 3145 inline void Set(int descriptor_number, |
3140 Descriptor* desc, | 3146 Descriptor* desc, |
3141 const WhitenessWitness&); | 3147 const WhitenessWitness&); |
3142 | 3148 |
3143 // Swap first and second descriptor. | 3149 // Swap first and second descriptor. |
3144 inline void SwapSortedKeys(int first, int second); | 3150 inline void SwapSortedKeys(int first, int second); |
3145 | 3151 |
3146 DISALLOW_IMPLICIT_CONSTRUCTORS(DescriptorArray); | 3152 DISALLOW_IMPLICIT_CONSTRUCTORS(DescriptorArray); |
3147 }; | 3153 }; |
(...skipping 1659 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4807 elementType scalar); \ | 4813 elementType scalar); \ |
4808 static inline elementType defaultValue(); \ | 4814 static inline elementType defaultValue(); \ |
4809 }; \ | 4815 }; \ |
4810 \ | 4816 \ |
4811 typedef FixedTypedArray<Type##ArrayTraits> Fixed##Type##Array; | 4817 typedef FixedTypedArray<Type##ArrayTraits> Fixed##Type##Array; |
4812 | 4818 |
4813 TYPED_ARRAYS(FIXED_TYPED_ARRAY_TRAITS) | 4819 TYPED_ARRAYS(FIXED_TYPED_ARRAY_TRAITS) |
4814 | 4820 |
4815 #undef FIXED_TYPED_ARRAY_TRAITS | 4821 #undef FIXED_TYPED_ARRAY_TRAITS |
4816 | 4822 |
| 4823 |
4817 // DeoptimizationInputData is a fixed array used to hold the deoptimization | 4824 // DeoptimizationInputData is a fixed array used to hold the deoptimization |
4818 // data for code generated by the Hydrogen/Lithium compiler. It also | 4825 // data for code generated by the Hydrogen/Lithium compiler. It also |
4819 // contains information about functions that were inlined. If N different | 4826 // contains information about functions that were inlined. If N different |
4820 // functions were inlined then first N elements of the literal array will | 4827 // functions were inlined then first N elements of the literal array will |
4821 // contain these functions. | 4828 // contain these functions. |
4822 // | 4829 // |
4823 // It can be empty. | 4830 // It can be empty. |
4824 class DeoptimizationInputData: public FixedArray { | 4831 class DeoptimizationInputData: public FixedArray { |
4825 public: | 4832 public: |
4826 // Layout description. Indices in the array. | 4833 // Layout description. Indices in the array. |
(...skipping 1077 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5904 inline bool has_code_cache(); | 5911 inline bool has_code_cache(); |
5905 | 5912 |
5906 // [prototype]: implicit prototype object. | 5913 // [prototype]: implicit prototype object. |
5907 DECL_ACCESSORS(prototype, Object) | 5914 DECL_ACCESSORS(prototype, Object) |
5908 | 5915 |
5909 // [constructor]: points back to the function responsible for this map. | 5916 // [constructor]: points back to the function responsible for this map. |
5910 DECL_ACCESSORS(constructor, Object) | 5917 DECL_ACCESSORS(constructor, Object) |
5911 | 5918 |
5912 // [instance descriptors]: describes the object. | 5919 // [instance descriptors]: describes the object. |
5913 DECL_ACCESSORS(instance_descriptors, DescriptorArray) | 5920 DECL_ACCESSORS(instance_descriptors, DescriptorArray) |
5914 inline void InitializeDescriptors(DescriptorArray* descriptors); | 5921 |
| 5922 // [layout descriptor]: describes the object layout. |
| 5923 DECL_ACCESSORS(layout_descriptor, LayoutDescriptor) |
| 5924 // |layout descriptor| accessor which can be used from GC. |
| 5925 inline LayoutDescriptor* layout_descriptor_gc_safe(); |
| 5926 |
| 5927 // |layout descriptor| accessor that returns a handle. |
| 5928 inline Handle<LayoutDescriptor> GetLayoutDescriptor(); |
| 5929 |
| 5930 inline void UpdateDescriptors(DescriptorArray* descriptors, |
| 5931 LayoutDescriptor* layout_descriptor); |
| 5932 inline void InitializeDescriptors(DescriptorArray* descriptors, |
| 5933 LayoutDescriptor* layout_descriptor); |
5915 | 5934 |
5916 // [stub cache]: contains stubs compiled for this map. | 5935 // [stub cache]: contains stubs compiled for this map. |
5917 DECL_ACCESSORS(code_cache, Object) | 5936 DECL_ACCESSORS(code_cache, Object) |
5918 | 5937 |
5919 // [dependent code]: list of optimized codes that weakly embed this map. | 5938 // [dependent code]: list of optimized codes that weakly embed this map. |
5920 DECL_ACCESSORS(dependent_code, DependentCode) | 5939 DECL_ACCESSORS(dependent_code, DependentCode) |
5921 | 5940 |
5922 // [back pointer]: points back to the parent map from which a transition | 5941 // [back pointer]: points back to the parent map from which a transition |
5923 // leads to this map. The field overlaps with prototype transitions and the | 5942 // leads to this map. The field overlaps with prototype transitions and the |
5924 // back pointer will be moved into the prototype transitions array if | 5943 // back pointer will be moved into the prototype transitions array if |
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6234 static const int kPrototypeOffset = kBitField3Offset + kPointerSize; | 6253 static const int kPrototypeOffset = kBitField3Offset + kPointerSize; |
6235 static const int kConstructorOffset = kPrototypeOffset + kPointerSize; | 6254 static const int kConstructorOffset = kPrototypeOffset + kPointerSize; |
6236 // Storage for the transition array is overloaded to directly contain a back | 6255 // Storage for the transition array is overloaded to directly contain a back |
6237 // pointer if unused. When the map has transitions, the back pointer is | 6256 // pointer if unused. When the map has transitions, the back pointer is |
6238 // transferred to the transition array and accessed through an extra | 6257 // transferred to the transition array and accessed through an extra |
6239 // indirection. | 6258 // indirection. |
6240 static const int kTransitionsOrBackPointerOffset = | 6259 static const int kTransitionsOrBackPointerOffset = |
6241 kConstructorOffset + kPointerSize; | 6260 kConstructorOffset + kPointerSize; |
6242 static const int kDescriptorsOffset = | 6261 static const int kDescriptorsOffset = |
6243 kTransitionsOrBackPointerOffset + kPointerSize; | 6262 kTransitionsOrBackPointerOffset + kPointerSize; |
| 6263 #if V8_DOUBLE_FIELDS_UNBOXING |
| 6264 static const int kLayoutDecriptorOffset = kDescriptorsOffset + kPointerSize; |
| 6265 static const int kCodeCacheOffset = kLayoutDecriptorOffset + kPointerSize; |
| 6266 #else |
| 6267 static const int kLayoutDecriptorOffset = 1; // Must not be ever accessed. |
6244 static const int kCodeCacheOffset = kDescriptorsOffset + kPointerSize; | 6268 static const int kCodeCacheOffset = kDescriptorsOffset + kPointerSize; |
| 6269 #endif |
6245 static const int kDependentCodeOffset = kCodeCacheOffset + kPointerSize; | 6270 static const int kDependentCodeOffset = kCodeCacheOffset + kPointerSize; |
6246 static const int kSize = kDependentCodeOffset + kPointerSize; | 6271 static const int kSize = kDependentCodeOffset + kPointerSize; |
6247 | 6272 |
6248 // Layout of pointer fields. Heap iteration code relies on them | 6273 // Layout of pointer fields. Heap iteration code relies on them |
6249 // being continuously allocated. | 6274 // being continuously allocated. |
6250 static const int kPointerFieldsBeginOffset = Map::kPrototypeOffset; | 6275 static const int kPointerFieldsBeginOffset = Map::kPrototypeOffset; |
6251 static const int kPointerFieldsEndOffset = kSize; | 6276 static const int kPointerFieldsEndOffset = kSize; |
6252 | 6277 |
6253 // Byte offsets within kInstanceSizesOffset. | 6278 // Byte offsets within kInstanceSizesOffset. |
6254 static const int kInstanceSizeOffset = kInstanceSizesOffset + 0; | 6279 static const int kInstanceSizeOffset = kInstanceSizesOffset + 0; |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6312 typedef FixedBodyDescriptor<kPointerFieldsBeginOffset, | 6337 typedef FixedBodyDescriptor<kPointerFieldsBeginOffset, |
6313 kPointerFieldsEndOffset, | 6338 kPointerFieldsEndOffset, |
6314 kSize> BodyDescriptor; | 6339 kSize> BodyDescriptor; |
6315 | 6340 |
6316 // Compares this map to another to see if they describe equivalent objects. | 6341 // Compares this map to another to see if they describe equivalent objects. |
6317 // If |mode| is set to CLEAR_INOBJECT_PROPERTIES, |other| is treated as if | 6342 // If |mode| is set to CLEAR_INOBJECT_PROPERTIES, |other| is treated as if |
6318 // it had exactly zero inobject properties. | 6343 // it had exactly zero inobject properties. |
6319 // The "shared" flags of both this map and |other| are ignored. | 6344 // The "shared" flags of both this map and |other| are ignored. |
6320 bool EquivalentToForNormalization(Map* other, PropertyNormalizationMode mode); | 6345 bool EquivalentToForNormalization(Map* other, PropertyNormalizationMode mode); |
6321 | 6346 |
| 6347 // Returns true if given field is unboxed double. |
| 6348 inline bool IsUnboxedDoubleField(FieldIndex index); |
| 6349 |
6322 #if TRACE_MAPS | 6350 #if TRACE_MAPS |
6323 static void TraceTransition(const char* what, Map* from, Map* to, Name* name); | 6351 static void TraceTransition(const char* what, Map* from, Map* to, Name* name); |
6324 static void TraceAllTransitions(Map* map); | 6352 static void TraceAllTransitions(Map* map); |
6325 #endif | 6353 #endif |
6326 | 6354 |
| 6355 static inline Handle<Map> CopyInstallDescriptorsForTesting( |
| 6356 Handle<Map> map, int new_descriptor, Handle<DescriptorArray> descriptors, |
| 6357 Handle<LayoutDescriptor> layout_descriptor); |
| 6358 |
6327 private: | 6359 private: |
6328 static void ConnectElementsTransition(Handle<Map> parent, Handle<Map> child); | 6360 static void ConnectElementsTransition(Handle<Map> parent, Handle<Map> child); |
6329 static void ConnectTransition(Handle<Map> parent, Handle<Map> child, | 6361 static void ConnectTransition(Handle<Map> parent, Handle<Map> child, |
6330 Handle<Name> name, SimpleTransitionFlag flag); | 6362 Handle<Name> name, SimpleTransitionFlag flag); |
6331 | 6363 |
6332 bool EquivalentToForTransition(Map* other); | 6364 bool EquivalentToForTransition(Map* other); |
6333 static Handle<Map> RawCopy(Handle<Map> map, int instance_size); | 6365 static Handle<Map> RawCopy(Handle<Map> map, int instance_size); |
6334 static Handle<Map> ShareDescriptor(Handle<Map> map, | 6366 static Handle<Map> ShareDescriptor(Handle<Map> map, |
6335 Handle<DescriptorArray> descriptors, | 6367 Handle<DescriptorArray> descriptors, |
6336 Descriptor* descriptor); | 6368 Descriptor* descriptor); |
6337 static Handle<Map> CopyInstallDescriptors( | 6369 static Handle<Map> CopyInstallDescriptors( |
6338 Handle<Map> map, | 6370 Handle<Map> map, int new_descriptor, Handle<DescriptorArray> descriptors, |
6339 int new_descriptor, | 6371 Handle<LayoutDescriptor> layout_descriptor); |
6340 Handle<DescriptorArray> descriptors); | |
6341 static Handle<Map> CopyAddDescriptor(Handle<Map> map, | 6372 static Handle<Map> CopyAddDescriptor(Handle<Map> map, |
6342 Descriptor* descriptor, | 6373 Descriptor* descriptor, |
6343 TransitionFlag flag); | 6374 TransitionFlag flag); |
6344 static Handle<Map> CopyReplaceDescriptors(Handle<Map> map, | 6375 static Handle<Map> CopyReplaceDescriptors( |
6345 Handle<DescriptorArray> descriptors, | 6376 Handle<Map> map, Handle<DescriptorArray> descriptors, |
6346 TransitionFlag flag, | 6377 Handle<LayoutDescriptor> layout_descriptor, TransitionFlag flag, |
6347 MaybeHandle<Name> maybe_name, | 6378 MaybeHandle<Name> maybe_name, const char* reason, |
6348 const char* reason, | 6379 SimpleTransitionFlag simple_flag); |
6349 SimpleTransitionFlag simple_flag); | 6380 |
6350 static Handle<Map> CopyReplaceDescriptor(Handle<Map> map, | 6381 static Handle<Map> CopyReplaceDescriptor(Handle<Map> map, |
6351 Handle<DescriptorArray> descriptors, | 6382 Handle<DescriptorArray> descriptors, |
6352 Descriptor* descriptor, | 6383 Descriptor* descriptor, |
6353 int index, | 6384 int index, |
6354 TransitionFlag flag); | 6385 TransitionFlag flag); |
6355 | 6386 |
6356 static Handle<Map> CopyNormalized(Handle<Map> map, | 6387 static Handle<Map> CopyNormalized(Handle<Map> map, |
6357 PropertyNormalizationMode mode); | 6388 PropertyNormalizationMode mode); |
6358 | 6389 |
6359 // 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. |
6360 // This includes adding transitions to the leaf map or changing | 6391 // This includes adding transitions to the leaf map or changing |
6361 // the descriptor array. | 6392 // the descriptor array. |
6362 inline void NotifyLeafMapLayoutChange(); | 6393 inline void NotifyLeafMapLayoutChange(); |
6363 | 6394 |
6364 static Handle<Map> TransitionElementsToSlow(Handle<Map> object, | 6395 static Handle<Map> TransitionElementsToSlow(Handle<Map> object, |
6365 ElementsKind to_kind); | 6396 ElementsKind to_kind); |
6366 | 6397 |
6367 // Zaps the contents of backing data structures. Note that the | 6398 // Zaps the contents of backing data structures. Note that the |
6368 // heap verifier (i.e. VerifyMarkingVisitor) relies on zapping of objects | 6399 // heap verifier (i.e. VerifyMarkingVisitor) relies on zapping of objects |
6369 // holding weak references when incremental marking is used, because it also | 6400 // holding weak references when incremental marking is used, because it also |
6370 // iterates over objects that are otherwise unreachable. | 6401 // iterates over objects that are otherwise unreachable. |
6371 // 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 |
6372 // heap verification is turned on. | 6403 // heap verification is turned on. |
6373 void ZapPrototypeTransitions(); | 6404 void ZapPrototypeTransitions(); |
6374 void ZapTransitions(); | 6405 void ZapTransitions(); |
6375 | 6406 |
6376 void DeprecateTransitionTree(); | 6407 void DeprecateTransitionTree(); |
6377 void DeprecateTarget(PropertyType type, Name* key, | 6408 void DeprecateTarget(PropertyType type, Name* key, |
6378 PropertyAttributes attributes, | 6409 PropertyAttributes attributes, |
6379 DescriptorArray* new_descriptors); | 6410 DescriptorArray* new_descriptors, |
| 6411 LayoutDescriptor* new_layout_descriptor); |
6380 | 6412 |
6381 Map* FindLastMatchMap(int verbatim, int length, DescriptorArray* descriptors); | 6413 Map* FindLastMatchMap(int verbatim, int length, DescriptorArray* descriptors); |
6382 | 6414 |
6383 void UpdateFieldType(int descriptor_number, Handle<Name> name, | 6415 void UpdateFieldType(int descriptor_number, Handle<Name> name, |
6384 Handle<HeapType> new_type); | 6416 Handle<HeapType> new_type); |
6385 | 6417 |
6386 void PrintGeneralization(FILE* file, | 6418 void PrintGeneralization(FILE* file, |
6387 const char* reason, | 6419 const char* reason, |
6388 int modify_index, | 6420 int modify_index, |
6389 int split, | 6421 int split, |
(...skipping 4585 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10975 } else { | 11007 } else { |
10976 value &= ~(1 << bit_position); | 11008 value &= ~(1 << bit_position); |
10977 } | 11009 } |
10978 return value; | 11010 return value; |
10979 } | 11011 } |
10980 }; | 11012 }; |
10981 | 11013 |
10982 } } // namespace v8::internal | 11014 } } // namespace v8::internal |
10983 | 11015 |
10984 #endif // V8_OBJECTS_H_ | 11016 #endif // V8_OBJECTS_H_ |
OLD | NEW |