summaryrefslogtreecommitdiff
path: root/deps/v8/src/objects/stack-frame-info.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/objects/stack-frame-info.h')
-rw-r--r--deps/v8/src/objects/stack-frame-info.h69
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