1 // Copyright 2018 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef V8_OBJECTS_STACK_FRAME_INFO_H_ 6 #define V8_OBJECTS_STACK_FRAME_INFO_H_ 7 8 #include "src/objects/struct.h" 9 #include "torque-generated/bit-fields.h" 10 11 // Has to be the last include (doesn't have include guards): 12 #include "src/objects/object-macros.h" 13 14 namespace v8 { 15 namespace internal { 16 17 class FrameArray; 18 class WasmInstanceObject; 19 20 #include "torque-generated/src/objects/stack-frame-info-tq.inc" 21 22 class StackFrameInfo 23 : 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 DECL_BOOLEAN_ACCESSORS(is_eval) 29 DECL_BOOLEAN_ACCESSORS(is_constructor) 30 DECL_BOOLEAN_ACCESSORS(is_wasm) 31 DECL_BOOLEAN_ACCESSORS(is_asmjs_wasm) 32 DECL_BOOLEAN_ACCESSORS(is_user_java_script) 33 DECL_BOOLEAN_ACCESSORS(is_toplevel) 34 DECL_BOOLEAN_ACCESSORS(is_async) 35 DECL_BOOLEAN_ACCESSORS(is_promise_all) 36 DECL_BOOLEAN_ACCESSORS(is_promise_any) 37 38 // Dispatched behavior. 39 DECL_PRINTER(StackFrameInfo) 40 41 private: 42 // 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 // This class is used to lazily initialize a StackFrameInfo object from 49 // a FrameArray plus an index. 50 // The first time any of the Get* or Is* methods is called, a 51 // StackFrameInfo object is allocated and all necessary information 52 // retrieved. 53 class StackTraceFrame 54 : public TorqueGeneratedStackTraceFrame<StackTraceFrame, Struct> { 55 public: 56 NEVER_READ_ONLY_SPACE 57 58 // Dispatched behavior. 59 DECL_PRINTER(StackTraceFrame) 60 61 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 static Handle<Object> GetFileName(Handle<StackTraceFrame> frame); 71 static Handle<Object> GetScriptNameOrSourceUrl(Handle<StackTraceFrame> frame); 72 static Handle<Object> GetFunctionName(Handle<StackTraceFrame> frame); 73 static Handle<Object> GetMethodName(Handle<StackTraceFrame> frame); 74 static Handle<Object> GetTypeName(Handle<StackTraceFrame> frame); 75 static Handle<Object> GetEvalOrigin(Handle<StackTraceFrame> frame); 76 static Handle<Object> GetWasmModuleName(Handle<StackTraceFrame> frame); 77 static Handle<WasmInstanceObject> GetWasmInstance( 78 Handle<StackTraceFrame> frame); 79 80 static bool IsEval(Handle<StackTraceFrame> frame); 81 static bool IsConstructor(Handle<StackTraceFrame> frame); 82 static bool IsWasm(Handle<StackTraceFrame> frame); 83 static bool IsAsmJsWasm(Handle<StackTraceFrame> frame); 84 static bool IsUserJavaScript(Handle<StackTraceFrame> frame); 85 static bool IsToplevel(Handle<StackTraceFrame> frame); 86 static bool IsAsync(Handle<StackTraceFrame> frame); 87 static bool IsPromiseAll(Handle<StackTraceFrame> frame); 88 static bool IsPromiseAny(Handle<StackTraceFrame> frame); 89 90 private: 91 static Handle<StackFrameInfo> GetFrameInfo(Handle<StackTraceFrame> frame); 92 static void InitializeFrameInfo(Handle<StackTraceFrame> frame); 93 94 TQ_OBJECT_CONSTRUCTORS(StackTraceFrame) 95 }; 96 97 // Small helper that retrieves the FrameArray from a stack-trace 98 // consisting of a FixedArray of StackTraceFrame objects. 99 // This helper is only temporary until all FrameArray use-sites have 100 // been converted to use StackTraceFrame and StackFrameInfo objects. 101 V8_EXPORT_PRIVATE 102 Handle<FrameArray> GetFrameArrayFromStackTrace(Isolate* isolate, 103 Handle<FixedArray> stack_trace); 104 105 class IncrementalStringBuilder; 106 void SerializeStackTraceFrame(Isolate* isolate, Handle<StackTraceFrame> frame, 107 IncrementalStringBuilder* builder); 108 V8_EXPORT_PRIVATE 109 MaybeHandle<String> SerializeStackTraceFrame(Isolate* isolate, 110 Handle<StackTraceFrame> frame); 111 112 } // namespace internal 113 } // namespace v8 114 115 #include "src/objects/object-macros-undef.h" 116 117 #endif // V8_OBJECTS_STACK_FRAME_INFO_H_ 118