1 // Copyright 2016 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_DEBUG_INTERFACE_TYPES_H_ 6 #define V8_DEBUG_INTERFACE_TYPES_H_ 7 8 #include <cstdint> 9 #include <string> 10 #include <vector> 11 12 #include "include/v8.h" 13 #include "src/common/globals.h" 14 15 namespace v8 { 16 17 namespace internal { 18 class BuiltinArguments; 19 } // namespace internal 20 21 namespace debug { 22 23 /** 24 * Defines location inside script. 25 * Lines and columns are 0-based. 26 */ 27 class V8_EXPORT_PRIVATE Location { 28 public: 29 Location(int line_number, int column_number); 30 /** 31 * Create empty location. 32 */ 33 Location(); 34 35 int GetLineNumber() const; 36 int GetColumnNumber() const; 37 bool IsEmpty() const; 38 39 private: 40 int line_number_; 41 int column_number_; 42 bool is_empty_; 43 }; 44 45 enum DebugAsyncActionType { 46 kDebugPromiseThen, 47 kDebugPromiseCatch, 48 kDebugPromiseFinally, 49 kDebugWillHandle, 50 kDebugDidHandle, 51 kAsyncFunctionSuspended, 52 kAsyncFunctionFinished 53 }; 54 55 enum BreakLocationType { 56 kCallBreakLocation, 57 kReturnBreakLocation, 58 kDebuggerStatementBreakLocation, 59 kCommonBreakLocation 60 }; 61 62 enum class CoverageMode { 63 // Make use of existing information in feedback vectors on the heap. 64 // Only return a yes/no result. Optimization and GC are not affected. 65 // Collecting best effort coverage does not reset counters. 66 kBestEffort, 67 // Disable optimization and prevent feedback vectors from being garbage 68 // collected in order to preserve precise invocation counts. Collecting 69 // precise count coverage resets counters to get incremental updates. 70 kPreciseCount, 71 // We are only interested in a yes/no result for the function. Optimization 72 // and GC can be allowed once a function has been invoked. Collecting 73 // precise binary coverage resets counters for incremental updates. 74 kPreciseBinary, 75 // Similar to the precise coverage modes but provides coverage at a 76 // lower granularity. Design doc: goo.gl/lA2swZ. 77 kBlockCount, 78 kBlockBinary, 79 }; 80 81 enum class TypeProfileMode { 82 kNone, 83 kCollect, 84 }; 85 86 class V8_EXPORT_PRIVATE BreakLocation : public Location { 87 public: BreakLocation(int line_number,int column_number,BreakLocationType type)88 BreakLocation(int line_number, int column_number, BreakLocationType type) 89 : Location(line_number, column_number), type_(type) {} 90 type()91 BreakLocationType type() const { return type_; } 92 93 private: 94 BreakLocationType type_; 95 }; 96 97 class ConsoleCallArguments : private v8::FunctionCallbackInfo<v8::Value> { 98 public: Length()99 int Length() const { return v8::FunctionCallbackInfo<v8::Value>::Length(); } 100 V8_INLINE Local<Value> operator[](int i) const { 101 return v8::FunctionCallbackInfo<v8::Value>::operator[](i); 102 } 103 104 explicit ConsoleCallArguments(const v8::FunctionCallbackInfo<v8::Value>&); 105 explicit ConsoleCallArguments(const internal::BuiltinArguments&); 106 }; 107 108 class ConsoleContext { 109 public: ConsoleContext(int id,v8::Local<v8::String> name)110 ConsoleContext(int id, v8::Local<v8::String> name) : id_(id), name_(name) {} ConsoleContext()111 ConsoleContext() : id_(0) {} 112 id()113 int id() const { return id_; } name()114 v8::Local<v8::String> name() const { return name_; } 115 116 private: 117 int id_; 118 v8::Local<v8::String> name_; 119 }; 120 121 class ConsoleDelegate { 122 public: Debug(const ConsoleCallArguments & args,const ConsoleContext & context)123 virtual void Debug(const ConsoleCallArguments& args, 124 const ConsoleContext& context) {} Error(const ConsoleCallArguments & args,const ConsoleContext & context)125 virtual void Error(const ConsoleCallArguments& args, 126 const ConsoleContext& context) {} Info(const ConsoleCallArguments & args,const ConsoleContext & context)127 virtual void Info(const ConsoleCallArguments& args, 128 const ConsoleContext& context) {} Log(const ConsoleCallArguments & args,const ConsoleContext & context)129 virtual void Log(const ConsoleCallArguments& args, 130 const ConsoleContext& context) {} Warn(const ConsoleCallArguments & args,const ConsoleContext & context)131 virtual void Warn(const ConsoleCallArguments& args, 132 const ConsoleContext& context) {} Dir(const ConsoleCallArguments & args,const ConsoleContext & context)133 virtual void Dir(const ConsoleCallArguments& args, 134 const ConsoleContext& context) {} DirXml(const ConsoleCallArguments & args,const ConsoleContext & context)135 virtual void DirXml(const ConsoleCallArguments& args, 136 const ConsoleContext& context) {} Table(const ConsoleCallArguments & args,const ConsoleContext & context)137 virtual void Table(const ConsoleCallArguments& args, 138 const ConsoleContext& context) {} Trace(const ConsoleCallArguments & args,const ConsoleContext & context)139 virtual void Trace(const ConsoleCallArguments& args, 140 const ConsoleContext& context) {} Group(const ConsoleCallArguments & args,const ConsoleContext & context)141 virtual void Group(const ConsoleCallArguments& args, 142 const ConsoleContext& context) {} GroupCollapsed(const ConsoleCallArguments & args,const ConsoleContext & context)143 virtual void GroupCollapsed(const ConsoleCallArguments& args, 144 const ConsoleContext& context) {} GroupEnd(const ConsoleCallArguments & args,const ConsoleContext & context)145 virtual void GroupEnd(const ConsoleCallArguments& args, 146 const ConsoleContext& context) {} Clear(const ConsoleCallArguments & args,const ConsoleContext & context)147 virtual void Clear(const ConsoleCallArguments& args, 148 const ConsoleContext& context) {} Count(const ConsoleCallArguments & args,const ConsoleContext & context)149 virtual void Count(const ConsoleCallArguments& args, 150 const ConsoleContext& context) {} CountReset(const ConsoleCallArguments & args,const ConsoleContext & context)151 virtual void CountReset(const ConsoleCallArguments& args, 152 const ConsoleContext& context) {} Assert(const ConsoleCallArguments & args,const ConsoleContext & context)153 virtual void Assert(const ConsoleCallArguments& args, 154 const ConsoleContext& context) {} Profile(const ConsoleCallArguments & args,const ConsoleContext & context)155 virtual void Profile(const ConsoleCallArguments& args, 156 const ConsoleContext& context) {} ProfileEnd(const ConsoleCallArguments & args,const ConsoleContext & context)157 virtual void ProfileEnd(const ConsoleCallArguments& args, 158 const ConsoleContext& context) {} Time(const ConsoleCallArguments & args,const ConsoleContext & context)159 virtual void Time(const ConsoleCallArguments& args, 160 const ConsoleContext& context) {} TimeLog(const ConsoleCallArguments & args,const ConsoleContext & context)161 virtual void TimeLog(const ConsoleCallArguments& args, 162 const ConsoleContext& context) {} TimeEnd(const ConsoleCallArguments & args,const ConsoleContext & context)163 virtual void TimeEnd(const ConsoleCallArguments& args, 164 const ConsoleContext& context) {} TimeStamp(const ConsoleCallArguments & args,const ConsoleContext & context)165 virtual void TimeStamp(const ConsoleCallArguments& args, 166 const ConsoleContext& context) {} 167 virtual ~ConsoleDelegate() = default; 168 }; 169 170 using BreakpointId = int; 171 172 } // namespace debug 173 } // namespace v8 174 175 #endif // V8_DEBUG_INTERFACE_TYPES_H_ 176