| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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 #include <memory> | 9 #include <memory> |
| 10 | 10 |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 // - JSGlobalProxy | 69 // - JSGlobalProxy |
| 70 // - JSValue | 70 // - JSValue |
| 71 // - JSDate | 71 // - JSDate |
| 72 // - JSMessageObject | 72 // - JSMessageObject |
| 73 // - JSProxy | 73 // - JSProxy |
| 74 // - FixedArrayBase | 74 // - FixedArrayBase |
| 75 // - ByteArray | 75 // - ByteArray |
| 76 // - BytecodeArray | 76 // - BytecodeArray |
| 77 // - FixedArray | 77 // - FixedArray |
| 78 // - DescriptorArray | 78 // - DescriptorArray |
| 79 // - FrameArray |
| 79 // - LiteralsArray | 80 // - LiteralsArray |
| 80 // - HashTable | 81 // - HashTable |
| 81 // - Dictionary | 82 // - Dictionary |
| 82 // - StringTable | 83 // - StringTable |
| 83 // - StringSet | 84 // - StringSet |
| 84 // - CompilationCacheTable | 85 // - CompilationCacheTable |
| 85 // - CodeCacheHashTable | 86 // - CodeCacheHashTable |
| 86 // - MapCache | 87 // - MapCache |
| 87 // - OrderedHashTable | 88 // - OrderedHashTable |
| 88 // - OrderedHashSet | 89 // - OrderedHashSet |
| (...skipping 766 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 855 #define DECL_ACCESSORS(name, type) \ | 856 #define DECL_ACCESSORS(name, type) \ |
| 856 inline type* name() const; \ | 857 inline type* name() const; \ |
| 857 inline void set_##name(type* value, \ | 858 inline void set_##name(type* value, \ |
| 858 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); \ | 859 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); \ |
| 859 | 860 |
| 860 | 861 |
| 861 #define DECLARE_CAST(type) \ | 862 #define DECLARE_CAST(type) \ |
| 862 INLINE(static type* cast(Object* object)); \ | 863 INLINE(static type* cast(Object* object)); \ |
| 863 INLINE(static const type* cast(const Object* object)); | 864 INLINE(static const type* cast(const Object* object)); |
| 864 | 865 |
| 865 | 866 class AbstractCode; |
| 866 class AccessorPair; | 867 class AccessorPair; |
| 867 class AllocationSite; | 868 class AllocationSite; |
| 868 class AllocationSiteCreationContext; | 869 class AllocationSiteCreationContext; |
| 869 class AllocationSiteUsageContext; | 870 class AllocationSiteUsageContext; |
| 870 class Cell; | 871 class Cell; |
| 871 class ConsString; | 872 class ConsString; |
| 872 class ElementsAccessor; | 873 class ElementsAccessor; |
| 873 class FixedArrayBase; | 874 class FixedArrayBase; |
| 874 class FunctionLiteral; | 875 class FunctionLiteral; |
| 875 class JSGlobalObject; | 876 class JSGlobalObject; |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 954 V(FixedUint8ClampedArray) \ | 955 V(FixedUint8ClampedArray) \ |
| 955 V(ByteArray) \ | 956 V(ByteArray) \ |
| 956 V(BytecodeArray) \ | 957 V(BytecodeArray) \ |
| 957 V(FreeSpace) \ | 958 V(FreeSpace) \ |
| 958 V(JSReceiver) \ | 959 V(JSReceiver) \ |
| 959 V(JSObject) \ | 960 V(JSObject) \ |
| 960 V(JSContextExtensionObject) \ | 961 V(JSContextExtensionObject) \ |
| 961 V(JSGeneratorObject) \ | 962 V(JSGeneratorObject) \ |
| 962 V(Map) \ | 963 V(Map) \ |
| 963 V(DescriptorArray) \ | 964 V(DescriptorArray) \ |
| 965 V(FrameArray) \ |
| 964 V(TransitionArray) \ | 966 V(TransitionArray) \ |
| 965 V(LiteralsArray) \ | 967 V(LiteralsArray) \ |
| 966 V(TypeFeedbackMetadata) \ | 968 V(TypeFeedbackMetadata) \ |
| 967 V(TypeFeedbackVector) \ | 969 V(TypeFeedbackVector) \ |
| 968 V(DeoptimizationInputData) \ | 970 V(DeoptimizationInputData) \ |
| 969 V(DeoptimizationOutputData) \ | 971 V(DeoptimizationOutputData) \ |
| 970 V(DependentCode) \ | 972 V(DependentCode) \ |
| 971 V(HandlerTable) \ | 973 V(HandlerTable) \ |
| 972 V(FixedArray) \ | 974 V(FixedArray) \ |
| 973 V(FixedDoubleArray) \ | 975 V(FixedDoubleArray) \ |
| (...skipping 1914 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2888 inline int last_used_index() const; | 2890 inline int last_used_index() const; |
| 2889 inline void set_last_used_index(int index); | 2891 inline void set_last_used_index(int index); |
| 2890 | 2892 |
| 2891 // Disallow inherited setters. | 2893 // Disallow inherited setters. |
| 2892 void set(int index, Smi* value); | 2894 void set(int index, Smi* value); |
| 2893 void set(int index, Object* value); | 2895 void set(int index, Object* value); |
| 2894 void set(int index, Object* value, WriteBarrierMode mode); | 2896 void set(int index, Object* value, WriteBarrierMode mode); |
| 2895 DISALLOW_IMPLICIT_CONSTRUCTORS(WeakFixedArray); | 2897 DISALLOW_IMPLICIT_CONSTRUCTORS(WeakFixedArray); |
| 2896 }; | 2898 }; |
| 2897 | 2899 |
| 2898 | |
| 2899 // Generic array grows dynamically with O(1) amortized insertion. | 2900 // Generic array grows dynamically with O(1) amortized insertion. |
| 2900 class ArrayList : public FixedArray { | 2901 class ArrayList : public FixedArray { |
| 2901 public: | 2902 public: |
| 2902 enum AddMode { | 2903 enum AddMode { |
| 2903 kNone, | 2904 kNone, |
| 2904 // Use this if GC can delete elements from the array. | 2905 // Use this if GC can delete elements from the array. |
| 2905 kReloadLengthAfterAllocation, | 2906 kReloadLengthAfterAllocation, |
| 2906 }; | 2907 }; |
| 2907 static Handle<ArrayList> Add(Handle<ArrayList> array, Handle<Object> obj, | 2908 static Handle<ArrayList> Add(Handle<ArrayList> array, Handle<Object> obj, |
| 2908 AddMode mode = kNone); | 2909 AddMode mode = kNone); |
| 2909 static Handle<ArrayList> Add(Handle<ArrayList> array, Handle<Object> obj1, | 2910 static Handle<ArrayList> Add(Handle<ArrayList> array, Handle<Object> obj1, |
| 2910 Handle<Object> obj2, AddMode = kNone); | 2911 Handle<Object> obj2, AddMode = kNone); |
| 2911 inline int Length(); | 2912 inline int Length(); |
| 2912 inline void SetLength(int length); | 2913 inline void SetLength(int length); |
| 2913 inline Object* Get(int index); | 2914 inline Object* Get(int index); |
| 2914 inline Object** Slot(int index); | 2915 inline Object** Slot(int index); |
| 2915 inline void Set(int index, Object* obj, | 2916 inline void Set(int index, Object* obj, |
| 2916 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); | 2917 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); |
| 2917 inline void Clear(int index, Object* undefined); | 2918 inline void Clear(int index, Object* undefined); |
| 2918 bool IsFull(); | 2919 bool IsFull(); |
| 2919 DECLARE_CAST(ArrayList) | 2920 DECLARE_CAST(ArrayList) |
| 2920 | 2921 |
| 2921 private: | 2922 private: |
| 2922 static Handle<ArrayList> EnsureSpace(Handle<ArrayList> array, int length); | 2923 static Handle<ArrayList> EnsureSpace(Handle<ArrayList> array, int length); |
| 2923 static const int kLengthIndex = 0; | 2924 static const int kLengthIndex = 0; |
| 2924 static const int kFirstIndex = 1; | 2925 static const int kFirstIndex = 1; |
| 2925 DISALLOW_IMPLICIT_CONSTRUCTORS(ArrayList); | 2926 DISALLOW_IMPLICIT_CONSTRUCTORS(ArrayList); |
| 2926 }; | 2927 }; |
| 2927 | 2928 |
| 2929 #define FRAME_ARRAY_FIELD_LIST(V) \ |
| 2930 V(WasmObject, Object) \ |
| 2931 V(WasmFunctionIndex, Smi) \ |
| 2932 V(Receiver, Object) \ |
| 2933 V(Function, JSFunction) \ |
| 2934 V(Code, AbstractCode) \ |
| 2935 V(Offset, Smi) |
| 2936 |
| 2937 // Container object for data collected during simple stack trace captures. |
| 2938 class FrameArray : public FixedArray { |
| 2939 public: |
| 2940 #define DECLARE_FRAME_ARRAY_ACCESSORS(name, type) \ |
| 2941 inline type* name(int frame_ix) const; \ |
| 2942 inline void Set##name(int frame_ix, type* value); |
| 2943 FRAME_ARRAY_FIELD_LIST(DECLARE_FRAME_ARRAY_ACCESSORS) |
| 2944 #undef DECLARE_FRAME_ARRAY_ACCESSORS |
| 2945 |
| 2946 inline void SetSloppyFrameCount(int count); |
| 2947 inline int SloppyFrameCount() const; |
| 2948 |
| 2949 inline bool IsWasmFrame(int frame_ix) const; |
| 2950 inline int FrameCount() const; |
| 2951 |
| 2952 void ShrinkToFit(); |
| 2953 |
| 2954 static Handle<FrameArray> AppendJSFrame(Handle<FrameArray> in, |
| 2955 Handle<Object> receiver, |
| 2956 Handle<JSFunction> function, |
| 2957 Handle<AbstractCode> code, |
| 2958 int offset); |
| 2959 static Handle<FrameArray> AppendWasmFrame(Handle<FrameArray> in, |
| 2960 Handle<Object> wasm_object, |
| 2961 int wasm_function_index, |
| 2962 Handle<AbstractCode> code, |
| 2963 int offset); |
| 2964 |
| 2965 DECLARE_CAST(FrameArray) |
| 2966 |
| 2967 private: |
| 2968 // The underlying fixed array embodies a captured stack trace. The number of |
| 2969 // sloppy frames is stored at array[kFirstIndex]. Frame i occupies indices |
| 2970 // kFirstIndex + 1 + [i * kElementsPerFrame, (i + 1) * kElementsPerFrame[, |
| 2971 // with internal offsets as below: |
| 2972 |
| 2973 static const int kWasmObjectOffset = 0; |
| 2974 static const int kWasmFunctionIndexOffset = 1; |
| 2975 |
| 2976 static const int kReceiverOffset = 0; |
| 2977 static const int kFunctionOffset = 1; |
| 2978 |
| 2979 static const int kCodeOffset = 2; |
| 2980 static const int kOffsetOffset = 3; |
| 2981 |
| 2982 static const int kElementsPerFrame = 4; |
| 2983 |
| 2984 // Array layout indices. |
| 2985 |
| 2986 static const int kFrameCountIndex = 0; |
| 2987 static const int kSloppyFramesIndex = 1; |
| 2988 static const int kFirstIndex = 2; |
| 2989 |
| 2990 static int LengthFor(int frame_count) { |
| 2991 return kFirstIndex + frame_count * kElementsPerFrame; |
| 2992 } |
| 2993 |
| 2994 static Handle<FrameArray> EnsureSpace(Handle<FrameArray> array, int length); |
| 2995 |
| 2996 friend class Factory; |
| 2997 DISALLOW_IMPLICIT_CONSTRUCTORS(FrameArray); |
| 2998 }; |
| 2928 | 2999 |
| 2929 // DescriptorArrays are fixed arrays used to hold instance descriptors. | 3000 // DescriptorArrays are fixed arrays used to hold instance descriptors. |
| 2930 // The format of the these objects is: | 3001 // The format of the these objects is: |
| 2931 // [0]: Number of descriptors | 3002 // [0]: Number of descriptors |
| 2932 // [1]: Either Smi(0) if uninitialized, or a pointer to small fixed array: | 3003 // [1]: Either Smi(0) if uninitialized, or a pointer to small fixed array: |
| 2933 // [0]: pointer to fixed array with enum cache | 3004 // [0]: pointer to fixed array with enum cache |
| 2934 // [1]: either Smi(0) or pointer to fixed array with indices | 3005 // [1]: either Smi(0) or pointer to fixed array with indices |
| 2935 // [2]: first key | 3006 // [2]: first key |
| 2936 // [2 + number of descriptors * kDescriptorSize]: start of slack | 3007 // [2 + number of descriptors * kDescriptorSize]: start of slack |
| 2937 class DescriptorArray: public FixedArray { | 3008 class DescriptorArray: public FixedArray { |
| (...skipping 8158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11096 } | 11167 } |
| 11097 return value; | 11168 return value; |
| 11098 } | 11169 } |
| 11099 }; | 11170 }; |
| 11100 | 11171 |
| 11101 | 11172 |
| 11102 } // NOLINT, false-positive due to second-order macros. | 11173 } // NOLINT, false-positive due to second-order macros. |
| 11103 } // NOLINT, false-positive due to second-order macros. | 11174 } // NOLINT, false-positive due to second-order macros. |
| 11104 | 11175 |
| 11105 #endif // V8_OBJECTS_H_ | 11176 #endif // V8_OBJECTS_H_ |
| OLD | NEW |