diff options
Diffstat (limited to 'deps/v8/src/objects/stack-frame-info.h')
-rw-r--r-- | deps/v8/src/objects/stack-frame-info.h | 69 |
1 files changed, 54 insertions, 15 deletions
diff --git a/deps/v8/src/objects/stack-frame-info.h b/deps/v8/src/objects/stack-frame-info.h index 8764547ecc..cb67637119 100644 --- a/deps/v8/src/objects/stack-frame-info.h +++ b/deps/v8/src/objects/stack-frame-info.h @@ -13,6 +13,8 @@ namespace v8 { namespace internal { +class FrameArray; + class StackFrameInfo : public Struct { public: NEVER_READ_ONLY_SPACE @@ -34,21 +36,8 @@ class StackFrameInfo : public Struct { DECL_PRINTER(StackFrameInfo) DECL_VERIFIER(StackFrameInfo) - // Layout description. -#define STACK_FRAME_INFO_FIELDS(V) \ - V(kLineNumberIndex, kTaggedSize) \ - V(kColumnNumberIndex, kTaggedSize) \ - V(kScriptIdIndex, kTaggedSize) \ - V(kScriptNameIndex, kTaggedSize) \ - V(kScriptNameOrSourceUrlIndex, kTaggedSize) \ - V(kFunctionNameIndex, kTaggedSize) \ - V(kFlagIndex, kTaggedSize) \ - V(kIdIndex, kTaggedSize) \ - /* Total size. */ \ - V(kSize, 0) - - DEFINE_FIELD_OFFSET_CONSTANTS(Struct::kHeaderSize, STACK_FRAME_INFO_FIELDS) -#undef STACK_FRAME_INFO_FIELDS + DEFINE_FIELD_OFFSET_CONSTANTS(Struct::kHeaderSize, + TORQUE_GENERATED_STACK_FRAME_INFO_FIELDS) private: // Bit position in the flag, from least significant bit position. @@ -59,6 +48,56 @@ class StackFrameInfo : public Struct { OBJECT_CONSTRUCTORS(StackFrameInfo, Struct); }; +// This class is used to lazily initialize a StackFrameInfo object from +// a FrameArray plus an index. +// The first time any of the Get* or Is* methods is called, a +// StackFrameInfo object is allocated and all necessary information +// retrieved. +class StackTraceFrame : public Struct { + public: + NEVER_READ_ONLY_SPACE + DECL_ACCESSORS(frame_array, Object) + DECL_INT_ACCESSORS(frame_index) + DECL_ACCESSORS(frame_info, Object) + DECL_INT_ACCESSORS(id) + + DECL_CAST(StackTraceFrame) + + // Dispatched behavior. + DECL_PRINTER(StackTraceFrame) + DECL_VERIFIER(StackTraceFrame) + + // Layout description. +#define STACK_FRAME_FIELDS(V) \ + V(kFrameArrayOffset, kTaggedSize) \ + V(kFrameIndexOffset, kTaggedSize) \ + V(kFrameInfoOffset, kTaggedSize) \ + V(kIdOffset, kTaggedSize) \ + /* Total size. */ \ + V(kSize, 0) + + DEFINE_FIELD_OFFSET_CONSTANTS(Struct::kHeaderSize, STACK_FRAME_FIELDS) +#undef STACK_FRAME_FIELDS + + static int GetLineNumber(Handle<StackTraceFrame> frame); + static int GetColumnNumber(Handle<StackTraceFrame> frame); + static int GetScriptId(Handle<StackTraceFrame> frame); + + static Handle<Object> GetFileName(Handle<StackTraceFrame> frame); + static Handle<Object> GetScriptNameOrSourceUrl(Handle<StackTraceFrame> frame); + static Handle<Object> GetFunctionName(Handle<StackTraceFrame> frame); + + static bool IsEval(Handle<StackTraceFrame> frame); + static bool IsConstructor(Handle<StackTraceFrame> frame); + static bool IsWasm(Handle<StackTraceFrame> frame); + + private: + OBJECT_CONSTRUCTORS(StackTraceFrame, Struct); + + static Handle<StackFrameInfo> GetFrameInfo(Handle<StackTraceFrame> frame); + static void InitializeFrameInfo(Handle<StackTraceFrame> frame); +}; + } // namespace internal } // namespace v8 |