stack-frame-info.h 4.44 KB
Newer Older
1 2 3 4 5 6 7
// Copyright 2018 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef V8_OBJECTS_STACK_FRAME_INFO_H_
#define V8_OBJECTS_STACK_FRAME_INFO_H_

8
#include "src/objects/struct.h"
9
#include "torque-generated/bit-fields.h"
10 11 12 13 14 15 16

// Has to be the last include (doesn't have include guards):
#include "src/objects/object-macros.h"

namespace v8 {
namespace internal {

17
class FrameArray;
18
class WasmInstanceObject;
19

20 21
#include "torque-generated/src/objects/stack-frame-info-tq.inc"

22 23
class StackFrameInfo
    : public TorqueGeneratedStackFrameInfo<StackFrameInfo, Struct> {
24
 public:
25
  NEVER_READ_ONLY_SPACE
26
  // Wasm frames only: function_offset instead of promise_combinator_index.
27
  DECL_INT_ACCESSORS(function_offset)
28 29 30
  DECL_BOOLEAN_ACCESSORS(is_eval)
  DECL_BOOLEAN_ACCESSORS(is_constructor)
  DECL_BOOLEAN_ACCESSORS(is_wasm)
31
  DECL_BOOLEAN_ACCESSORS(is_asmjs_wasm)
32
  DECL_BOOLEAN_ACCESSORS(is_user_java_script)
33 34 35
  DECL_BOOLEAN_ACCESSORS(is_toplevel)
  DECL_BOOLEAN_ACCESSORS(is_async)
  DECL_BOOLEAN_ACCESSORS(is_promise_all)
36
  DECL_BOOLEAN_ACCESSORS(is_promise_any)
37 38 39 40 41 42

  // Dispatched behavior.
  DECL_PRINTER(StackFrameInfo)

 private:
  // Bit position in the flag, from least significant bit position.
43
  DEFINE_TORQUE_GENERATED_STACK_FRAME_INFO_FLAGS()
44

45
  TQ_OBJECT_CONSTRUCTORS(StackFrameInfo)
46 47
};

48 49 50 51 52
// 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.
53 54
class StackTraceFrame
    : public TorqueGeneratedStackTraceFrame<StackTraceFrame, Struct> {
55 56 57 58 59 60 61
 public:
  NEVER_READ_ONLY_SPACE

  // Dispatched behavior.
  DECL_PRINTER(StackTraceFrame)

  static int GetLineNumber(Handle<StackTraceFrame> frame);
62
  static int GetOneBasedLineNumber(Handle<StackTraceFrame> frame);
63
  static int GetColumnNumber(Handle<StackTraceFrame> frame);
64
  static int GetOneBasedColumnNumber(Handle<StackTraceFrame> frame);
65
  static int GetScriptId(Handle<StackTraceFrame> frame);
66
  static int GetPromiseCombinatorIndex(Handle<StackTraceFrame> frame);
67
  static int GetFunctionOffset(Handle<StackTraceFrame> frame);
68
  static int GetWasmFunctionIndex(Handle<StackTraceFrame> frame);
69 70 71 72

  static Handle<Object> GetFileName(Handle<StackTraceFrame> frame);
  static Handle<Object> GetScriptNameOrSourceUrl(Handle<StackTraceFrame> frame);
  static Handle<Object> GetFunctionName(Handle<StackTraceFrame> frame);
73 74 75
  static Handle<Object> GetMethodName(Handle<StackTraceFrame> frame);
  static Handle<Object> GetTypeName(Handle<StackTraceFrame> frame);
  static Handle<Object> GetEvalOrigin(Handle<StackTraceFrame> frame);
76
  static Handle<Object> GetWasmModuleName(Handle<StackTraceFrame> frame);
77 78
  static Handle<WasmInstanceObject> GetWasmInstance(
      Handle<StackTraceFrame> frame);
79 80 81 82

  static bool IsEval(Handle<StackTraceFrame> frame);
  static bool IsConstructor(Handle<StackTraceFrame> frame);
  static bool IsWasm(Handle<StackTraceFrame> frame);
83
  static bool IsAsmJsWasm(Handle<StackTraceFrame> frame);
84
  static bool IsUserJavaScript(Handle<StackTraceFrame> frame);
85 86 87
  static bool IsToplevel(Handle<StackTraceFrame> frame);
  static bool IsAsync(Handle<StackTraceFrame> frame);
  static bool IsPromiseAll(Handle<StackTraceFrame> frame);
88
  static bool IsPromiseAny(Handle<StackTraceFrame> frame);
89 90 91 92

 private:
  static Handle<StackFrameInfo> GetFrameInfo(Handle<StackTraceFrame> frame);
  static void InitializeFrameInfo(Handle<StackTraceFrame> frame);
93 94

  TQ_OBJECT_CONSTRUCTORS(StackTraceFrame)
95 96
};

97 98 99 100 101 102 103 104
// Small helper that retrieves the FrameArray from a stack-trace
// consisting of a FixedArray of StackTraceFrame objects.
// This helper is only temporary until all FrameArray use-sites have
// been converted to use StackTraceFrame and StackFrameInfo objects.
V8_EXPORT_PRIVATE
Handle<FrameArray> GetFrameArrayFromStackTrace(Isolate* isolate,
                                               Handle<FixedArray> stack_trace);

105
class IncrementalStringBuilder;
106 107
void SerializeStackTraceFrame(Isolate* isolate, Handle<StackTraceFrame> frame,
                              IncrementalStringBuilder* builder);
108
V8_EXPORT_PRIVATE
109 110 111
MaybeHandle<String> SerializeStackTraceFrame(Isolate* isolate,
                                             Handle<StackTraceFrame> frame);

112 113 114 115 116 117
}  // namespace internal
}  // namespace v8

#include "src/objects/object-macros-undef.h"

#endif  // V8_OBJECTS_STACK_FRAME_INFO_H_