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 844 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
855 #define DECL_ACCESSORS(name, type) \ | 855 #define DECL_ACCESSORS(name, type) \ |
856 inline type* name() const; \ | 856 inline type* name() const; \ |
857 inline void set_##name(type* value, \ | 857 inline void set_##name(type* value, \ |
858 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); \ | 858 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); \ |
859 | 859 |
860 | 860 |
861 #define DECLARE_CAST(type) \ | 861 #define DECLARE_CAST(type) \ |
862 INLINE(static type* cast(Object* object)); \ | 862 INLINE(static type* cast(Object* object)); \ |
863 INLINE(static const type* cast(const Object* object)); | 863 INLINE(static const type* cast(const Object* object)); |
864 | 864 |
865 | 865 class AbstractCode; |
866 class AccessorPair; | 866 class AccessorPair; |
867 class AllocationSite; | 867 class AllocationSite; |
868 class AllocationSiteCreationContext; | 868 class AllocationSiteCreationContext; |
869 class AllocationSiteUsageContext; | 869 class AllocationSiteUsageContext; |
870 class Cell; | 870 class Cell; |
871 class ConsString; | 871 class ConsString; |
872 class ElementsAccessor; | 872 class ElementsAccessor; |
873 class FixedArrayBase; | 873 class FixedArrayBase; |
874 class FunctionLiteral; | 874 class FunctionLiteral; |
875 class JSGlobalObject; | 875 class JSGlobalObject; |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
954 V(FixedUint8ClampedArray) \ | 954 V(FixedUint8ClampedArray) \ |
955 V(ByteArray) \ | 955 V(ByteArray) \ |
956 V(BytecodeArray) \ | 956 V(BytecodeArray) \ |
957 V(FreeSpace) \ | 957 V(FreeSpace) \ |
958 V(JSReceiver) \ | 958 V(JSReceiver) \ |
959 V(JSObject) \ | 959 V(JSObject) \ |
960 V(JSContextExtensionObject) \ | 960 V(JSContextExtensionObject) \ |
961 V(JSGeneratorObject) \ | 961 V(JSGeneratorObject) \ |
962 V(Map) \ | 962 V(Map) \ |
963 V(DescriptorArray) \ | 963 V(DescriptorArray) \ |
| 964 V(FrameArray) \ |
964 V(TransitionArray) \ | 965 V(TransitionArray) \ |
965 V(LiteralsArray) \ | 966 V(LiteralsArray) \ |
966 V(TypeFeedbackMetadata) \ | 967 V(TypeFeedbackMetadata) \ |
967 V(TypeFeedbackVector) \ | 968 V(TypeFeedbackVector) \ |
968 V(DeoptimizationInputData) \ | 969 V(DeoptimizationInputData) \ |
969 V(DeoptimizationOutputData) \ | 970 V(DeoptimizationOutputData) \ |
970 V(DependentCode) \ | 971 V(DependentCode) \ |
971 V(HandlerTable) \ | 972 V(HandlerTable) \ |
972 V(FixedArray) \ | 973 V(FixedArray) \ |
973 V(FixedDoubleArray) \ | 974 V(FixedDoubleArray) \ |
(...skipping 1914 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2888 inline int last_used_index() const; | 2889 inline int last_used_index() const; |
2889 inline void set_last_used_index(int index); | 2890 inline void set_last_used_index(int index); |
2890 | 2891 |
2891 // Disallow inherited setters. | 2892 // Disallow inherited setters. |
2892 void set(int index, Smi* value); | 2893 void set(int index, Smi* value); |
2893 void set(int index, Object* value); | 2894 void set(int index, Object* value); |
2894 void set(int index, Object* value, WriteBarrierMode mode); | 2895 void set(int index, Object* value, WriteBarrierMode mode); |
2895 DISALLOW_IMPLICIT_CONSTRUCTORS(WeakFixedArray); | 2896 DISALLOW_IMPLICIT_CONSTRUCTORS(WeakFixedArray); |
2896 }; | 2897 }; |
2897 | 2898 |
2898 | |
2899 // Generic array grows dynamically with O(1) amortized insertion. | 2899 // Generic array grows dynamically with O(1) amortized insertion. |
2900 class ArrayList : public FixedArray { | 2900 class ArrayList : public FixedArray { |
2901 public: | 2901 public: |
2902 enum AddMode { | 2902 enum AddMode { |
2903 kNone, | 2903 kNone, |
2904 // Use this if GC can delete elements from the array. | 2904 // Use this if GC can delete elements from the array. |
2905 kReloadLengthAfterAllocation, | 2905 kReloadLengthAfterAllocation, |
2906 }; | 2906 }; |
2907 static Handle<ArrayList> Add(Handle<ArrayList> array, Handle<Object> obj, | 2907 static Handle<ArrayList> Add(Handle<ArrayList> array, Handle<Object> obj, |
2908 AddMode mode = kNone); | 2908 AddMode mode = kNone); |
2909 static Handle<ArrayList> Add(Handle<ArrayList> array, Handle<Object> obj1, | 2909 static Handle<ArrayList> Add(Handle<ArrayList> array, Handle<Object> obj1, |
2910 Handle<Object> obj2, AddMode = kNone); | 2910 Handle<Object> obj2, AddMode = kNone); |
2911 inline int Length(); | 2911 inline int Length(); |
2912 inline void SetLength(int length); | 2912 inline void SetLength(int length); |
2913 inline Object* Get(int index); | 2913 inline Object* Get(int index); |
2914 inline Object** Slot(int index); | 2914 inline Object** Slot(int index); |
2915 inline void Set(int index, Object* obj, | 2915 inline void Set(int index, Object* obj, |
2916 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); | 2916 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); |
2917 inline void Clear(int index, Object* undefined); | 2917 inline void Clear(int index, Object* undefined); |
2918 bool IsFull(); | 2918 bool IsFull(); |
2919 DECLARE_CAST(ArrayList) | 2919 DECLARE_CAST(ArrayList) |
2920 | 2920 |
2921 private: | 2921 private: |
2922 static Handle<ArrayList> EnsureSpace(Handle<ArrayList> array, int length); | 2922 static Handle<ArrayList> EnsureSpace(Handle<ArrayList> array, int length); |
2923 static const int kLengthIndex = 0; | 2923 static const int kLengthIndex = 0; |
2924 static const int kFirstIndex = 1; | 2924 static const int kFirstIndex = 1; |
2925 DISALLOW_IMPLICIT_CONSTRUCTORS(ArrayList); | 2925 DISALLOW_IMPLICIT_CONSTRUCTORS(ArrayList); |
2926 }; | 2926 }; |
2927 | 2927 |
| 2928 #define FRAME_ARRAY_FIELD_LIST(V) \ |
| 2929 V(WasmObject, Object) \ |
| 2930 V(WasmFunctionIndex, Smi) \ |
| 2931 V(Receiver, Object) \ |
| 2932 V(Function, JSFunction) \ |
| 2933 V(Code, AbstractCode) \ |
| 2934 V(Offset, Smi) |
| 2935 |
| 2936 // Container object for data collected during simple stack trace captures. |
| 2937 class FrameArray : public FixedArray { |
| 2938 public: |
| 2939 #define DECLARE_FRAME_ARRAY_ACCESSORS(name, type) \ |
| 2940 inline type* name(int frame_ix) const; \ |
| 2941 inline void Set##name(int frame_ix, type* value); |
| 2942 FRAME_ARRAY_FIELD_LIST(DECLARE_FRAME_ARRAY_ACCESSORS) |
| 2943 #undef DECLARE_FRAME_ARRAY_ACCESSORS |
| 2944 |
| 2945 inline bool IsWasmFrame(int frame_ix) const; |
| 2946 inline int FrameCount() const; |
| 2947 |
| 2948 static Handle<FrameArray> Allocate(Isolate* isolate, int number_of_frames); |
| 2949 |
| 2950 static Handle<FrameArray> AppendJSFrame(Handle<FrameArray> in, int frame_ix, |
| 2951 Handle<Object> receiver, |
| 2952 Handle<JSFunction> function, |
| 2953 Handle<AbstractCode> code, |
| 2954 int offset); |
| 2955 static Handle<FrameArray> AppendWasmFrame(Handle<FrameArray> in, int frame_ix, |
| 2956 Handle<Object> wasm_object, |
| 2957 int wasm_function_index, |
| 2958 Handle<AbstractCode> code, |
| 2959 int offset); |
| 2960 |
| 2961 static int LengthFor(int frame_count) { |
| 2962 return 1 + frame_count * kElementsPerFrame; |
| 2963 } |
| 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[0]. Frame i occupies indices |
| 2970 // 1 + [i * kElementsPerFrame, (i + 1) * kElementsPerFrame[, with internal |
| 2971 // 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 static Handle<FrameArray> EnsureSpace(Handle<FrameArray> array, int length); |
| 2985 |
| 2986 DISALLOW_IMPLICIT_CONSTRUCTORS(FrameArray); |
| 2987 }; |
2928 | 2988 |
2929 // DescriptorArrays are fixed arrays used to hold instance descriptors. | 2989 // DescriptorArrays are fixed arrays used to hold instance descriptors. |
2930 // The format of the these objects is: | 2990 // The format of the these objects is: |
2931 // [0]: Number of descriptors | 2991 // [0]: Number of descriptors |
2932 // [1]: Either Smi(0) if uninitialized, or a pointer to small fixed array: | 2992 // [1]: Either Smi(0) if uninitialized, or a pointer to small fixed array: |
2933 // [0]: pointer to fixed array with enum cache | 2993 // [0]: pointer to fixed array with enum cache |
2934 // [1]: either Smi(0) or pointer to fixed array with indices | 2994 // [1]: either Smi(0) or pointer to fixed array with indices |
2935 // [2]: first key | 2995 // [2]: first key |
2936 // [2 + number of descriptors * kDescriptorSize]: start of slack | 2996 // [2 + number of descriptors * kDescriptorSize]: start of slack |
2937 class DescriptorArray: public FixedArray { | 2997 class DescriptorArray: public FixedArray { |
(...skipping 8158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11096 } | 11156 } |
11097 return value; | 11157 return value; |
11098 } | 11158 } |
11099 }; | 11159 }; |
11100 | 11160 |
11101 | 11161 |
11102 } // NOLINT, false-positive due to second-order macros. | 11162 } // NOLINT, false-positive due to second-order macros. |
11103 } // NOLINT, false-positive due to second-order macros. | 11163 } // NOLINT, false-positive due to second-order macros. |
11104 | 11164 |
11105 #endif // V8_OBJECTS_H_ | 11165 #endif // V8_OBJECTS_H_ |
OLD | NEW |