| 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 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 // - MapCache | 81 // - MapCache |
| 82 // - OrderedHashTable | 82 // - OrderedHashTable |
| 83 // - OrderedHashSet | 83 // - OrderedHashSet |
| 84 // - OrderedHashMap | 84 // - OrderedHashMap |
| 85 // - Context | 85 // - Context |
| 86 // - TypeFeedbackVector | 86 // - TypeFeedbackVector |
| 87 // - JSFunctionResultCache | 87 // - JSFunctionResultCache |
| 88 // - ScopeInfo | 88 // - ScopeInfo |
| 89 // - TransitionArray | 89 // - TransitionArray |
| 90 // - ScriptContextTable | 90 // - ScriptContextTable |
| 91 // - WeakFixedArray |
| 91 // - FixedDoubleArray | 92 // - FixedDoubleArray |
| 92 // - ExternalArray | 93 // - ExternalArray |
| 93 // - ExternalUint8ClampedArray | 94 // - ExternalUint8ClampedArray |
| 94 // - ExternalInt8Array | 95 // - ExternalInt8Array |
| 95 // - ExternalUint8Array | 96 // - ExternalUint8Array |
| 96 // - ExternalInt16Array | 97 // - ExternalInt16Array |
| 97 // - ExternalUint16Array | 98 // - ExternalUint16Array |
| 98 // - ExternalInt32Array | 99 // - ExternalInt32Array |
| 99 // - ExternalUint32Array | 100 // - ExternalUint32Array |
| 100 // - ExternalFloat32Array | 101 // - ExternalFloat32Array |
| (...skipping 835 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 936 V(LayoutDescriptor) \ | 937 V(LayoutDescriptor) \ |
| 937 V(Map) \ | 938 V(Map) \ |
| 938 V(DescriptorArray) \ | 939 V(DescriptorArray) \ |
| 939 V(TransitionArray) \ | 940 V(TransitionArray) \ |
| 940 V(TypeFeedbackVector) \ | 941 V(TypeFeedbackVector) \ |
| 941 V(DeoptimizationInputData) \ | 942 V(DeoptimizationInputData) \ |
| 942 V(DeoptimizationOutputData) \ | 943 V(DeoptimizationOutputData) \ |
| 943 V(DependentCode) \ | 944 V(DependentCode) \ |
| 944 V(FixedArray) \ | 945 V(FixedArray) \ |
| 945 V(FixedDoubleArray) \ | 946 V(FixedDoubleArray) \ |
| 947 V(WeakFixedArray) \ |
| 946 V(ConstantPoolArray) \ | 948 V(ConstantPoolArray) \ |
| 947 V(Context) \ | 949 V(Context) \ |
| 948 V(ScriptContextTable) \ | 950 V(ScriptContextTable) \ |
| 949 V(NativeContext) \ | 951 V(NativeContext) \ |
| 950 V(ScopeInfo) \ | 952 V(ScopeInfo) \ |
| 951 V(JSFunction) \ | 953 V(JSFunction) \ |
| 952 V(Code) \ | 954 V(Code) \ |
| 953 V(Oddball) \ | 955 V(Oddball) \ |
| 954 V(SharedFunctionInfo) \ | 956 V(SharedFunctionInfo) \ |
| 955 V(JSValue) \ | 957 V(JSValue) \ |
| (...skipping 858 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1814 // Sets the property value in a normalized object given (key, value, details). | 1816 // Sets the property value in a normalized object given (key, value, details). |
| 1815 // Handles the special representation of JS global objects. | 1817 // Handles the special representation of JS global objects. |
| 1816 static void SetNormalizedProperty(Handle<JSObject> object, | 1818 static void SetNormalizedProperty(Handle<JSObject> object, |
| 1817 Handle<Name> key, | 1819 Handle<Name> key, |
| 1818 Handle<Object> value, | 1820 Handle<Object> value, |
| 1819 PropertyDetails details); | 1821 PropertyDetails details); |
| 1820 | 1822 |
| 1821 static void OptimizeAsPrototype(Handle<JSObject> object, | 1823 static void OptimizeAsPrototype(Handle<JSObject> object, |
| 1822 PrototypeOptimizationMode mode); | 1824 PrototypeOptimizationMode mode); |
| 1823 static void ReoptimizeIfPrototype(Handle<JSObject> object); | 1825 static void ReoptimizeIfPrototype(Handle<JSObject> object); |
| 1826 static void RegisterPrototypeUser(Handle<JSObject> prototype, |
| 1827 Handle<HeapObject> user); |
| 1828 static void UnregisterPrototypeUser(Handle<JSObject> prototype, |
| 1829 Handle<HeapObject> user); |
| 1824 | 1830 |
| 1825 // Retrieve interceptors. | 1831 // Retrieve interceptors. |
| 1826 InterceptorInfo* GetNamedInterceptor(); | 1832 InterceptorInfo* GetNamedInterceptor(); |
| 1827 InterceptorInfo* GetIndexedInterceptor(); | 1833 InterceptorInfo* GetIndexedInterceptor(); |
| 1828 | 1834 |
| 1829 // Used from JSReceiver. | 1835 // Used from JSReceiver. |
| 1830 MUST_USE_RESULT static Maybe<PropertyAttributes> | 1836 MUST_USE_RESULT static Maybe<PropertyAttributes> |
| 1831 GetPropertyAttributesWithInterceptor(Handle<JSObject> holder, | 1837 GetPropertyAttributesWithInterceptor(Handle<JSObject> holder, |
| 1832 Handle<Object> receiver, | 1838 Handle<Object> receiver, |
| 1833 Handle<Name> name); | 1839 Handle<Name> name); |
| (...skipping 767 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2601 | 2607 |
| 2602 // Dispatched behavior. | 2608 // Dispatched behavior. |
| 2603 DECLARE_PRINTER(FixedDoubleArray) | 2609 DECLARE_PRINTER(FixedDoubleArray) |
| 2604 DECLARE_VERIFIER(FixedDoubleArray) | 2610 DECLARE_VERIFIER(FixedDoubleArray) |
| 2605 | 2611 |
| 2606 private: | 2612 private: |
| 2607 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedDoubleArray); | 2613 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedDoubleArray); |
| 2608 }; | 2614 }; |
| 2609 | 2615 |
| 2610 | 2616 |
| 2617 class WeakFixedArray : public FixedArray { |
| 2618 public: |
| 2619 enum SearchForDuplicates { kAlwaysAdd, kAddIfNotFound }; |
| 2620 |
| 2621 // If |maybe_array| is not a WeakFixedArray, a fresh one will be allocated. |
| 2622 static Handle<WeakFixedArray> Add( |
| 2623 Handle<Object> maybe_array, Handle<HeapObject> value, |
| 2624 SearchForDuplicates search_for_duplicates = kAlwaysAdd); |
| 2625 |
| 2626 void Remove(Handle<HeapObject> value); |
| 2627 |
| 2628 inline Object* Get(int index) const; |
| 2629 inline int Length() const; |
| 2630 |
| 2631 DECLARE_CAST(WeakFixedArray) |
| 2632 |
| 2633 private: |
| 2634 static const int kLastUsedIndexIndex = 0; |
| 2635 static const int kFirstIndex = 1; |
| 2636 |
| 2637 static Handle<WeakFixedArray> Allocate( |
| 2638 Isolate* isolate, int size, Handle<WeakFixedArray> initialize_from); |
| 2639 |
| 2640 static void Set(Handle<WeakFixedArray> array, int index, |
| 2641 Handle<HeapObject> value); |
| 2642 inline void clear(int index); |
| 2643 inline bool IsEmptySlot(int index) const; |
| 2644 |
| 2645 inline int last_used_index() const; |
| 2646 inline void set_last_used_index(int index); |
| 2647 |
| 2648 // Disallow inherited setters. |
| 2649 void set(int index, Smi* value); |
| 2650 void set(int index, Object* value); |
| 2651 void set(int index, Object* value, WriteBarrierMode mode); |
| 2652 DISALLOW_IMPLICIT_CONSTRUCTORS(WeakFixedArray); |
| 2653 }; |
| 2654 |
| 2655 |
| 2611 // ConstantPoolArray describes a fixed-sized array containing constant pool | 2656 // ConstantPoolArray describes a fixed-sized array containing constant pool |
| 2612 // entries. | 2657 // entries. |
| 2613 // | 2658 // |
| 2614 // A ConstantPoolArray can be structured in two different ways depending upon | 2659 // A ConstantPoolArray can be structured in two different ways depending upon |
| 2615 // whether it is extended or small. The is_extended_layout() method can be used | 2660 // whether it is extended or small. The is_extended_layout() method can be used |
| 2616 // to discover which layout the constant pool has. | 2661 // to discover which layout the constant pool has. |
| 2617 // | 2662 // |
| 2618 // The format of a small constant pool is: | 2663 // The format of a small constant pool is: |
| 2619 // [kSmallLayout1Offset] : Small section layout bitmap 1 | 2664 // [kSmallLayout1Offset] : Small section layout bitmap 1 |
| 2620 // [kSmallLayout2Offset] : Small section layout bitmap 2 | 2665 // [kSmallLayout2Offset] : Small section layout bitmap 2 |
| (...skipping 3298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5919 // Tells whether the instance needs security checks when accessing its | 5964 // Tells whether the instance needs security checks when accessing its |
| 5920 // properties. | 5965 // properties. |
| 5921 inline void set_is_access_check_needed(bool access_check_needed); | 5966 inline void set_is_access_check_needed(bool access_check_needed); |
| 5922 inline bool is_access_check_needed(); | 5967 inline bool is_access_check_needed(); |
| 5923 | 5968 |
| 5924 // Returns true if map has a non-empty stub code cache. | 5969 // Returns true if map has a non-empty stub code cache. |
| 5925 inline bool has_code_cache(); | 5970 inline bool has_code_cache(); |
| 5926 | 5971 |
| 5927 // [prototype]: implicit prototype object. | 5972 // [prototype]: implicit prototype object. |
| 5928 DECL_ACCESSORS(prototype, Object) | 5973 DECL_ACCESSORS(prototype, Object) |
| 5974 // TODO(jkummerow): make set_prototype private. |
| 5975 void SetPrototype(Handle<Object> prototype, |
| 5976 PrototypeOptimizationMode proto_mode = FAST_PROTOTYPE); |
| 5977 bool ShouldRegisterAsPrototypeUser(Handle<JSObject> prototype); |
| 5978 bool CanUseOptimizationsBasedOnPrototypeRegistry(); |
| 5929 | 5979 |
| 5930 // [constructor]: points back to the function responsible for this map. | 5980 // [constructor]: points back to the function responsible for this map. |
| 5931 DECL_ACCESSORS(constructor, Object) | 5981 DECL_ACCESSORS(constructor, Object) |
| 5932 | 5982 |
| 5933 // [instance descriptors]: describes the object. | 5983 // [instance descriptors]: describes the object. |
| 5934 DECL_ACCESSORS(instance_descriptors, DescriptorArray) | 5984 DECL_ACCESSORS(instance_descriptors, DescriptorArray) |
| 5935 | 5985 |
| 5936 // [layout descriptor]: describes the object layout. | 5986 // [layout descriptor]: describes the object layout. |
| 5937 DECL_ACCESSORS(layout_descriptor, LayoutDescriptor) | 5987 DECL_ACCESSORS(layout_descriptor, LayoutDescriptor) |
| 5938 // |layout descriptor| accessor which can be used from GC. | 5988 // |layout descriptor| accessor which can be used from GC. |
| (...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6250 typedef void (*TraverseCallback)(Map* map, void* data); | 6300 typedef void (*TraverseCallback)(Map* map, void* data); |
| 6251 | 6301 |
| 6252 void TraverseTransitionTree(TraverseCallback callback, void* data); | 6302 void TraverseTransitionTree(TraverseCallback callback, void* data); |
| 6253 | 6303 |
| 6254 // When you set the prototype of an object using the __proto__ accessor you | 6304 // When you set the prototype of an object using the __proto__ accessor you |
| 6255 // need a new map for the object (the prototype is stored in the map). In | 6305 // need a new map for the object (the prototype is stored in the map). In |
| 6256 // order not to multiply maps unnecessarily we store these as transitions in | 6306 // order not to multiply maps unnecessarily we store these as transitions in |
| 6257 // the original map. That way we can transition to the same map if the same | 6307 // the original map. That way we can transition to the same map if the same |
| 6258 // prototype is set, rather than creating a new map every time. The | 6308 // prototype is set, rather than creating a new map every time. The |
| 6259 // transitions are in the form of a map where the keys are prototype objects | 6309 // transitions are in the form of a map where the keys are prototype objects |
| 6260 // and the values are the maps the are transitioned to. | 6310 // and the values are the maps they transition to. |
| 6261 static const int kMaxCachedPrototypeTransitions = 256; | 6311 static const int kMaxCachedPrototypeTransitions = 256; |
| 6262 static Handle<Map> TransitionToPrototype(Handle<Map> map, | 6312 static Handle<Map> TransitionToPrototype(Handle<Map> map, |
| 6263 Handle<Object> prototype); | 6313 Handle<Object> prototype, |
| 6314 PrototypeOptimizationMode mode); |
| 6264 | 6315 |
| 6265 static const int kMaxPreAllocatedPropertyFields = 255; | 6316 static const int kMaxPreAllocatedPropertyFields = 255; |
| 6266 | 6317 |
| 6267 // Layout description. | 6318 // Layout description. |
| 6268 static const int kInstanceSizesOffset = HeapObject::kHeaderSize; | 6319 static const int kInstanceSizesOffset = HeapObject::kHeaderSize; |
| 6269 static const int kInstanceAttributesOffset = kInstanceSizesOffset + kIntSize; | 6320 static const int kInstanceAttributesOffset = kInstanceSizesOffset + kIntSize; |
| 6270 static const int kBitField3Offset = kInstanceAttributesOffset + kIntSize; | 6321 static const int kBitField3Offset = kInstanceAttributesOffset + kIntSize; |
| 6271 static const int kPrototypeOffset = kBitField3Offset + kPointerSize; | 6322 static const int kPrototypeOffset = kBitField3Offset + kPointerSize; |
| 6272 static const int kConstructorOffset = kPrototypeOffset + kPointerSize; | 6323 static const int kConstructorOffset = kPrototypeOffset + kPointerSize; |
| 6273 // Storage for the transition array is overloaded to directly contain a back | 6324 // Storage for the transition array is overloaded to directly contain a back |
| (...skipping 4768 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11042 } else { | 11093 } else { |
| 11043 value &= ~(1 << bit_position); | 11094 value &= ~(1 << bit_position); |
| 11044 } | 11095 } |
| 11045 return value; | 11096 return value; |
| 11046 } | 11097 } |
| 11047 }; | 11098 }; |
| 11048 | 11099 |
| 11049 } } // namespace v8::internal | 11100 } } // namespace v8::internal |
| 11050 | 11101 |
| 11051 #endif // V8_OBJECTS_H_ | 11102 #endif // V8_OBJECTS_H_ |
| OLD | NEW |