| Index: src/objects.h
|
| diff --git a/src/objects.h b/src/objects.h
|
| index b7c67030c5076332dc2bc2d2e24cf2804078b0e1..2d90acdb1d73c3c1dec43b900b20e5796290a8c2 100644
|
| --- a/src/objects.h
|
| +++ b/src/objects.h
|
| @@ -76,6 +76,7 @@
|
| // - BytecodeArray
|
| // - FixedArray
|
| // - DescriptorArray
|
| +// - FrameArray
|
| // - LiteralsArray
|
| // - HashTable
|
| // - Dictionary
|
| @@ -862,7 +863,7 @@ enum class ComparisonResult {
|
| INLINE(static type* cast(Object* object)); \
|
| INLINE(static const type* cast(const Object* object));
|
|
|
| -
|
| +class AbstractCode;
|
| class AccessorPair;
|
| class AllocationSite;
|
| class AllocationSiteCreationContext;
|
| @@ -961,6 +962,7 @@ template <class C> inline bool Is(Object* obj);
|
| V(JSGeneratorObject) \
|
| V(Map) \
|
| V(DescriptorArray) \
|
| + V(FrameArray) \
|
| V(TransitionArray) \
|
| V(LiteralsArray) \
|
| V(TypeFeedbackMetadata) \
|
| @@ -2895,7 +2897,6 @@ class WeakFixedArray : public FixedArray {
|
| DISALLOW_IMPLICIT_CONSTRUCTORS(WeakFixedArray);
|
| };
|
|
|
| -
|
| // Generic array grows dynamically with O(1) amortized insertion.
|
| class ArrayList : public FixedArray {
|
| public:
|
| @@ -2925,6 +2926,76 @@ class ArrayList : public FixedArray {
|
| DISALLOW_IMPLICIT_CONSTRUCTORS(ArrayList);
|
| };
|
|
|
| +#define FRAME_ARRAY_FIELD_LIST(V) \
|
| + V(WasmObject, Object) \
|
| + V(WasmFunctionIndex, Smi) \
|
| + V(Receiver, Object) \
|
| + V(Function, JSFunction) \
|
| + V(Code, AbstractCode) \
|
| + V(Offset, Smi)
|
| +
|
| +// Container object for data collected during simple stack trace captures.
|
| +class FrameArray : public FixedArray {
|
| + public:
|
| +#define DECLARE_FRAME_ARRAY_ACCESSORS(name, type) \
|
| + inline type* name(int frame_ix) const; \
|
| + inline void Set##name(int frame_ix, type* value);
|
| + FRAME_ARRAY_FIELD_LIST(DECLARE_FRAME_ARRAY_ACCESSORS)
|
| +#undef DECLARE_FRAME_ARRAY_ACCESSORS
|
| +
|
| + inline void SetSloppyFrameCount(int count);
|
| + inline int SloppyFrameCount() const;
|
| +
|
| + inline bool IsWasmFrame(int frame_ix) const;
|
| + inline int FrameCount() const;
|
| +
|
| + void ShrinkToFit();
|
| +
|
| + static Handle<FrameArray> AppendJSFrame(Handle<FrameArray> in,
|
| + Handle<Object> receiver,
|
| + Handle<JSFunction> function,
|
| + Handle<AbstractCode> code,
|
| + int offset);
|
| + static Handle<FrameArray> AppendWasmFrame(Handle<FrameArray> in,
|
| + Handle<Object> wasm_object,
|
| + int wasm_function_index,
|
| + Handle<AbstractCode> code,
|
| + int offset);
|
| +
|
| + DECLARE_CAST(FrameArray)
|
| +
|
| + private:
|
| + // The underlying fixed array embodies a captured stack trace. The number of
|
| + // sloppy frames is stored at array[kFirstIndex]. Frame i occupies indices
|
| + // kFirstIndex + 1 + [i * kElementsPerFrame, (i + 1) * kElementsPerFrame[,
|
| + // with internal offsets as below:
|
| +
|
| + static const int kWasmObjectOffset = 0;
|
| + static const int kWasmFunctionIndexOffset = 1;
|
| +
|
| + static const int kReceiverOffset = 0;
|
| + static const int kFunctionOffset = 1;
|
| +
|
| + static const int kCodeOffset = 2;
|
| + static const int kOffsetOffset = 3;
|
| +
|
| + static const int kElementsPerFrame = 4;
|
| +
|
| + // Array layout indices.
|
| +
|
| + static const int kFrameCountIndex = 0;
|
| + static const int kSloppyFramesIndex = 1;
|
| + static const int kFirstIndex = 2;
|
| +
|
| + static int LengthFor(int frame_count) {
|
| + return kFirstIndex + frame_count * kElementsPerFrame;
|
| + }
|
| +
|
| + static Handle<FrameArray> EnsureSpace(Handle<FrameArray> array, int length);
|
| +
|
| + friend class Factory;
|
| + DISALLOW_IMPLICIT_CONSTRUCTORS(FrameArray);
|
| +};
|
|
|
| // DescriptorArrays are fixed arrays used to hold instance descriptors.
|
| // The format of the these objects is:
|
|
|