#ifndef V8_OBJECTS_DEBUG_OBJECTS_H_
#define V8_OBJECTS_DEBUG_OBJECTS_H_
#include <memory>
#include "src/base/bit-field.h"
#include "src/objects/fixed-array.h"
#include "src/objects/objects.h"
#include "src/objects/struct.h"
#include "torque-generated/bit-fields.h"
#include "src/objects/object-macros.h"
namespace v8 {
namespace internal {
class BreakPoint;
class BytecodeArray;
class StructBodyDescriptor;
#include "torque-generated/src/objects/debug-objects-tq.inc"
class DebugInfo : public TorqueGeneratedDebugInfo<DebugInfo, Struct> {
public:
DEFINE_TORQUE_GENERATED_DEBUG_INFO_FLAGS()
bool IsEmpty() const;
enum ExecutionMode : uint8_t {
kBreakpoints = 0,
kSideEffects = kDebugExecutionMode
};
ExecutionMode DebugExecutionMode() const;
void SetDebugExecutionMode(ExecutionMode value);
inline bool HasInstrumentedBytecodeArray();
inline Tagged<BytecodeArray> OriginalBytecodeArray(Isolate* isolate);
inline Tagged<BytecodeArray> DebugBytecodeArray(Isolate* isolate);
DECL_TRUSTED_POINTER_ACCESSORS(original_bytecode_array, BytecodeArray)
DECL_TRUSTED_POINTER_ACCESSORS(debug_bytecode_array, BytecodeArray)
bool HasBreakInfo() const;
V8_EXPORT_PRIVATE void ClearBreakInfo(Isolate* isolate);
void SetBreakAtEntry();
void ClearBreakAtEntry();
bool BreakAtEntry() const;
bool HasBreakPoint(Isolate* isolate, int source_position);
static bool ClearBreakPoint(Isolate* isolate,
DirectHandle<DebugInfo> debug_info,
DirectHandle<BreakPoint> break_point);
static void SetBreakPoint(Isolate* isolate,
DirectHandle<DebugInfo> debug_info,
int source_position,
DirectHandle<BreakPoint> break_point);
DirectHandle<Object> GetBreakPoints(Isolate* isolate, int source_position);
static DirectHandle<Object> FindBreakPointInfo(
Isolate* isolate, DirectHandle<DebugInfo> debug_info,
DirectHandle<BreakPoint> break_point);
int GetBreakPointCount(Isolate* isolate);
bool CanBreakAtEntry() const;
DECL_BOOLEAN_ACCESSORS(debug_is_blackboxed)
DECL_BOOLEAN_ACCESSORS(computed_debug_is_blackboxed)
DECL_INT_ACCESSORS(side_effect_state)
enum SideEffectState {
kNotComputed = 0,
kHasSideEffects = 1,
kRequiresRuntimeChecks = 2,
kHasNoSideEffect = 3,
};
SideEffectState GetSideEffectState(Isolate* isolate);
DECL_INT_ACCESSORS(debugging_id)
DEFINE_TORQUE_GENERATED_DEBUGGER_HINTS()
static const int kNoDebuggingId = 0;
bool HasCoverageInfo() const;
void ClearCoverageInfo(Isolate* isolate);
static const int kEstimatedNofBreakPointsInFunction = 4;
class BodyDescriptor;
private:
Tagged<Object> GetBreakPointInfo(Isolate* isolate, int source_position);
TQ_OBJECT_CONSTRUCTORS(DebugInfo)
};
class BreakPointInfo
: public TorqueGeneratedBreakPointInfo<BreakPointInfo, Struct> {
public:
static void ClearBreakPoint(Isolate* isolate,
DirectHandle<BreakPointInfo> info,
DirectHandle<BreakPoint> break_point);
static void SetBreakPoint(Isolate* isolate, DirectHandle<BreakPointInfo> info,
DirectHandle<BreakPoint> break_point);
static bool HasBreakPoint(Isolate* isolate, DirectHandle<BreakPointInfo> info,
DirectHandle<BreakPoint> break_point);
static MaybeDirectHandle<BreakPoint> GetBreakPointById(
Isolate* isolate, DirectHandle<BreakPointInfo> info, int breakpoint_id);
int GetBreakPointCount(Isolate* isolate);
int GetStatementPosition(Handle<DebugInfo> debug_info);
using BodyDescriptor = StructBodyDescriptor;
TQ_OBJECT_CONSTRUCTORS(BreakPointInfo)
};
class CoverageInfo
: public TorqueGeneratedCoverageInfo<CoverageInfo, HeapObject> {
public:
void InitializeSlot(int slot_index, int start_pos, int end_pos);
void ResetBlockCount(int slot_index);
static int SizeFor(int slot_count) {
return OBJECT_POINTER_ALIGN(kHeaderSize + slot_count * Slot::kSize);
}
void CoverageInfoPrint(std::ostream& os,
std::unique_ptr<char[]> function_name = nullptr);
class BodyDescriptor;
using Slot = TorqueGeneratedCoverageInfoSlotOffsets;
TQ_OBJECT_CONSTRUCTORS(CoverageInfo)
};
class BreakPoint : public TorqueGeneratedBreakPoint<BreakPoint, Struct> {
public:
using BodyDescriptor = StructBodyDescriptor;
TQ_OBJECT_CONSTRUCTORS(BreakPoint)
};
class StackFrameInfo
: public TorqueGeneratedStackFrameInfo<StackFrameInfo, Struct> {
public:
static int GetSourcePosition(DirectHandle<StackFrameInfo> info);
inline Tagged<Script> script() const;
DECL_INT_ACCESSORS(bytecode_offset_or_source_position)
DECL_BOOLEAN_ACCESSORS(is_constructor)
DECL_VERIFIER(StackFrameInfo)
DEFINE_TORQUE_GENERATED_STACK_FRAME_INFO_FLAGS()
using BodyDescriptor = StructBodyDescriptor;
private:
TQ_OBJECT_CONSTRUCTORS(StackFrameInfo)
};
class StackTraceInfo
: public TorqueGeneratedStackTraceInfo<StackTraceInfo, Struct> {
public:
int length() const;
Tagged<StackFrameInfo> get(int index) const;
DECL_VERIFIER(StackTraceInfo)
using BodyDescriptor = StructBodyDescriptor;
private:
TQ_OBJECT_CONSTRUCTORS(StackTraceInfo)
};
class ErrorStackData
: public TorqueGeneratedErrorStackData<ErrorStackData, Struct> {
public:
inline bool HasFormattedStack() const;
DECL_ACCESSORS(formatted_stack, Tagged<Object>)
inline bool HasCallSiteInfos() const;
DECL_GETTER(call_site_infos, Tagged<FixedArray>)
DECL_VERIFIER(ErrorStackData)
using BodyDescriptor = StructBodyDescriptor;
TQ_OBJECT_CONSTRUCTORS(ErrorStackData)
};
}
}
#include "src/objects/object-macros-undef.h"
#endif