blob: 4a5f174224659f4c0c22854e3f25cb4a5e0f712d [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// THIS IS GENERATED CODE, DO NOT MODIFY!
// clang-format off
#ifndef EXTENSIONS_CXX_DEBUGGING_API_H_
#define EXTENSIONS_CXX_DEBUGGING_API_H_
#include <string>
#include <vector>
#include <emscripten/val.h>
#include "llvm/ADT/Optional.h"
namespace symbols_backend {
namespace api {
// Error details
class Error {
public:
enum class Code {
kInternalError,
kProtocolError,
kModuleNotFoundError,
kEvalError
};
private:
Code code_ = {}; // An error code
std::string message_ = {}; // The error message
public:
Error() = default;
virtual ~Error() = default;
Code GetCode() const { return code_; }
Error &SetCode(Code value) {
code_ = std::move(value);
return *this;
}
std::string GetMessage() const { return message_; }
Error &SetMessage(std::string value) {
message_ = std::move(value);
return *this;
}
};
// Offsets in raw modules
class RawLocationRange {
private:
std::string raw_module_id_ = {}; // Module identifier
int32_t start_offset_ = {}; // Start offset of the code range in the raw module
int32_t end_offset_ = {}; // Exclusive end offset of the code range in the raw module
public:
RawLocationRange() = default;
virtual ~RawLocationRange() = default;
std::string GetRawModuleId() const { return raw_module_id_; }
RawLocationRange &SetRawModuleId(std::string value) {
raw_module_id_ = std::move(value);
return *this;
}
int32_t GetStartOffset() const { return start_offset_; }
RawLocationRange &SetStartOffset(int32_t value) {
start_offset_ = std::move(value);
return *this;
}
int32_t GetEndOffset() const { return end_offset_; }
RawLocationRange &SetEndOffset(int32_t value) {
end_offset_ = std::move(value);
return *this;
}
};
// Offsets in raw modules
class RawLocation {
private:
std::string raw_module_id_ = {}; // Module identifier
int32_t code_offset_ = {}; // Offset of the location in the raw module
int32_t inline_frame_index_ = {}; // Index of inline call frame, 0 is top.
public:
RawLocation() = default;
virtual ~RawLocation() = default;
std::string GetRawModuleId() const { return raw_module_id_; }
RawLocation &SetRawModuleId(std::string value) {
raw_module_id_ = std::move(value);
return *this;
}
int32_t GetCodeOffset() const { return code_offset_; }
RawLocation &SetCodeOffset(int32_t value) {
code_offset_ = std::move(value);
return *this;
}
int32_t GetInlineFrameIndex() const { return inline_frame_index_; }
RawLocation &SetInlineFrameIndex(int32_t value) {
inline_frame_index_ = std::move(value);
return *this;
}
};
// Locations in source files
class SourceLocation {
private:
std::string raw_module_id_ = {}; // Module identifier
std::string source_file_ = {}; // Url of the source file
int32_t line_number_ = {}; // Line number of the location in the source file
int32_t column_number_ = {}; // Column number of the location in the source file
public:
SourceLocation() = default;
virtual ~SourceLocation() = default;
std::string GetRawModuleId() const { return raw_module_id_; }
SourceLocation &SetRawModuleId(std::string value) {
raw_module_id_ = std::move(value);
return *this;
}
std::string GetSourceFile() const { return source_file_; }
SourceLocation &SetSourceFile(std::string value) {
source_file_ = std::move(value);
return *this;
}
int32_t GetLineNumber() const { return line_number_; }
SourceLocation &SetLineNumber(int32_t value) {
line_number_ = std::move(value);
return *this;
}
int32_t GetColumnNumber() const { return column_number_; }
SourceLocation &SetColumnNumber(int32_t value) {
column_number_ = std::move(value);
return *this;
}
};
// A source language variable
class Variable {
public:
enum class Scope {
kLocal,
kParameter,
kGlobal
};
private:
Scope scope_ = {}; // Scope of the variable
std::string name_ = {}; // Name of the variable
std::string type_ = {}; // Type of the variable
std::vector<std::string> typedefs_ = {};
public:
Variable() = default;
virtual ~Variable() = default;
Scope GetScope() const { return scope_; }
Variable &SetScope(Scope value) {
scope_ = std::move(value);
return *this;
}
std::string GetName() const { return name_; }
Variable &SetName(std::string value) {
name_ = std::move(value);
return *this;
}
std::string GetType() const { return type_; }
Variable &SetType(std::string value) {
type_ = std::move(value);
return *this;
}
std::vector<std::string> GetTypedefs() const { return typedefs_; }
Variable &SetTypedefs(std::vector<std::string> value) {
typedefs_ = std::move(value);
return *this;
}
};
class FieldInfo {
private:
llvm::Optional<std::string> name_ = {};
int32_t offset_ = {};
std::string type_id_ = {};
public:
FieldInfo() = default;
virtual ~FieldInfo() = default;
llvm::Optional<std::string> GetName() const { return name_; }
FieldInfo &SetName(llvm::Optional<std::string> value) {
name_ = std::move(value);
return *this;
}
int32_t GetOffset() const { return offset_; }
FieldInfo &SetOffset(int32_t value) {
offset_ = std::move(value);
return *this;
}
std::string GetTypeId() const { return type_id_; }
FieldInfo &SetTypeId(std::string value) {
type_id_ = std::move(value);
return *this;
}
};
class Enumerator {
private:
std::string name_ = {};
int64_t value_ = {};
std::string type_id_ = {};
public:
Enumerator() = default;
virtual ~Enumerator() = default;
std::string GetName() const { return name_; }
Enumerator &SetName(std::string value) {
name_ = std::move(value);
return *this;
}
int64_t GetValue() const { return value_; }
Enumerator &SetValue(int64_t value) {
value_ = std::move(value);
return *this;
}
std::string GetTypeId() const { return type_id_; }
Enumerator &SetTypeId(std::string value) {
type_id_ = std::move(value);
return *this;
}
};
class TypeInfo {
private:
std::vector<std::string> type_names_ = {};
std::string type_id_ = {};
int32_t alignment_ = {};
int32_t size_ = {};
bool can_expand_ = {};
bool has_value_ = {};
llvm::Optional<int32_t> array_size_ = {};
bool is_pointer_ = {};
std::vector<FieldInfo> members_ = {};
std::vector<Enumerator> enumerators_ = {};
public:
TypeInfo() = default;
virtual ~TypeInfo() = default;
std::vector<std::string> GetTypeNames() const { return type_names_; }
TypeInfo &SetTypeNames(std::vector<std::string> value) {
type_names_ = std::move(value);
return *this;
}
std::string GetTypeId() const { return type_id_; }
TypeInfo &SetTypeId(std::string value) {
type_id_ = std::move(value);
return *this;
}
int32_t GetAlignment() const { return alignment_; }
TypeInfo &SetAlignment(int32_t value) {
alignment_ = std::move(value);
return *this;
}
int32_t GetSize() const { return size_; }
TypeInfo &SetSize(int32_t value) {
size_ = std::move(value);
return *this;
}
bool GetCanExpand() const { return can_expand_; }
TypeInfo &SetCanExpand(bool value) {
can_expand_ = std::move(value);
return *this;
}
bool GetHasValue() const { return has_value_; }
TypeInfo &SetHasValue(bool value) {
has_value_ = std::move(value);
return *this;
}
llvm::Optional<int32_t> GetArraySize() const { return array_size_; }
TypeInfo &SetArraySize(llvm::Optional<int32_t> value) {
array_size_ = std::move(value);
return *this;
}
bool GetIsPointer() const { return is_pointer_; }
TypeInfo &SetIsPointer(bool value) {
is_pointer_ = std::move(value);
return *this;
}
std::vector<FieldInfo> GetMembers() const { return members_; }
TypeInfo &SetMembers(std::vector<FieldInfo> value) {
members_ = std::move(value);
return *this;
}
std::vector<Enumerator> GetEnumerators() const { return enumerators_; }
TypeInfo &SetEnumerators(std::vector<Enumerator> value) {
enumerators_ = std::move(value);
return *this;
}
};
// Return type of the AddRawModule command
class AddRawModuleResponse {
private:
std::vector<std::string> sources_ = {}; // The original source files the raw module was compiled from. Filenames are in URL format
std::vector<std::string> dwos_ = {}; // DWO filenames that might be lazily loaded. Used internally by the extension to set up emscripten filesystem.
llvm::Optional<Error> error_ = {}; // Error details if the raw module couldn't be handled
public:
AddRawModuleResponse() = default;
virtual ~AddRawModuleResponse() = default;
std::vector<std::string> GetSources() const { return sources_; }
AddRawModuleResponse &SetSources(std::vector<std::string> value) {
sources_ = std::move(value);
return *this;
}
std::vector<std::string> GetDwos() const { return dwos_; }
AddRawModuleResponse &SetDwos(std::vector<std::string> value) {
dwos_ = std::move(value);
return *this;
}
llvm::Optional<Error> GetError() const { return error_; }
AddRawModuleResponse &SetError(llvm::Optional<Error> value) {
error_ = std::move(value);
return *this;
}
};
// Return type of the SourceLocationToRawLocation command
class SourceLocationToRawLocationResponse {
private:
std::vector<RawLocationRange> raw_location_ranges_ = {}; // The raw locations matching the source locations
llvm::Optional<Error> error_ = {}; // Error details if the command failed
public:
SourceLocationToRawLocationResponse() = default;
virtual ~SourceLocationToRawLocationResponse() = default;
std::vector<RawLocationRange> GetRawLocationRanges() const { return raw_location_ranges_; }
SourceLocationToRawLocationResponse &SetRawLocationRanges(std::vector<RawLocationRange> value) {
raw_location_ranges_ = std::move(value);
return *this;
}
llvm::Optional<Error> GetError() const { return error_; }
SourceLocationToRawLocationResponse &SetError(llvm::Optional<Error> value) {
error_ = std::move(value);
return *this;
}
};
// Return type of the RawLocationToSourceLocation command
class RawLocationToSourceLocationResponse {
private:
std::vector<SourceLocation> source_location_ = {}; // The source locations matching the raw locations
llvm::Optional<Error> error_ = {}; // Error details if the command failed
public:
RawLocationToSourceLocationResponse() = default;
virtual ~RawLocationToSourceLocationResponse() = default;
std::vector<SourceLocation> GetSourceLocation() const { return source_location_; }
RawLocationToSourceLocationResponse &SetSourceLocation(std::vector<SourceLocation> value) {
source_location_ = std::move(value);
return *this;
}
llvm::Optional<Error> GetError() const { return error_; }
RawLocationToSourceLocationResponse &SetError(llvm::Optional<Error> value) {
error_ = std::move(value);
return *this;
}
};
// Return type of the ListVariablesInScope command
class ListVariablesInScopeResponse {
private:
std::vector<Variable> variable_ = {}; // The variables present in the scope
llvm::Optional<Error> error_ = {}; // Error details if the command failed
public:
ListVariablesInScopeResponse() = default;
virtual ~ListVariablesInScopeResponse() = default;
std::vector<Variable> GetVariable() const { return variable_; }
ListVariablesInScopeResponse &SetVariable(std::vector<Variable> value) {
variable_ = std::move(value);
return *this;
}
llvm::Optional<Error> GetError() const { return error_; }
ListVariablesInScopeResponse &SetError(llvm::Optional<Error> value) {
error_ = std::move(value);
return *this;
}
};
// Return type of the GetFunctionInfo command
class GetFunctionInfoResponse {
private:
std::vector<std::string> function_names_ = {}; // A list of functions (multiple if inlined) starting with innermost.
std::vector<std::string> missing_symbol_files_ = {}; // A string representing a missing .dwo file.
llvm::Optional<Error> error_ = {}; // error details if the command failed
public:
GetFunctionInfoResponse() = default;
virtual ~GetFunctionInfoResponse() = default;
std::vector<std::string> GetFunctionNames() const { return function_names_; }
GetFunctionInfoResponse &SetFunctionNames(std::vector<std::string> value) {
function_names_ = std::move(value);
return *this;
}
std::vector<std::string> GetMissingSymbolFiles() const { return missing_symbol_files_; }
GetFunctionInfoResponse &SetMissingSymbolFiles(std::vector<std::string> value) {
missing_symbol_files_ = std::move(value);
return *this;
}
llvm::Optional<Error> GetError() const { return error_; }
GetFunctionInfoResponse &SetError(llvm::Optional<Error> value) {
error_ = std::move(value);
return *this;
}
};
// Return type of the GetInlinedFunctionRanges command
class GetInlinedFunctionRangesResponse {
private:
std::vector<RawLocationRange> raw_location_ranges_ = {}; // The raw locations of the inlined function or empty
llvm::Optional<Error> error_ = {}; // Error details if the command failed
public:
GetInlinedFunctionRangesResponse() = default;
virtual ~GetInlinedFunctionRangesResponse() = default;
std::vector<RawLocationRange> GetRawLocationRanges() const { return raw_location_ranges_; }
GetInlinedFunctionRangesResponse &SetRawLocationRanges(std::vector<RawLocationRange> value) {
raw_location_ranges_ = std::move(value);
return *this;
}
llvm::Optional<Error> GetError() const { return error_; }
GetInlinedFunctionRangesResponse &SetError(llvm::Optional<Error> value) {
error_ = std::move(value);
return *this;
}
};
// Return type of the GetInlinedCalleesRanges command
class GetInlinedCalleesRangesResponse {
private:
std::vector<RawLocationRange> raw_location_ranges_ = {}; // The raw locations of any child inlined functions
llvm::Optional<Error> error_ = {}; // Error details if the command failed
public:
GetInlinedCalleesRangesResponse() = default;
virtual ~GetInlinedCalleesRangesResponse() = default;
std::vector<RawLocationRange> GetRawLocationRanges() const { return raw_location_ranges_; }
GetInlinedCalleesRangesResponse &SetRawLocationRanges(std::vector<RawLocationRange> value) {
raw_location_ranges_ = std::move(value);
return *this;
}
llvm::Optional<Error> GetError() const { return error_; }
GetInlinedCalleesRangesResponse &SetError(llvm::Optional<Error> value) {
error_ = std::move(value);
return *this;
}
};
// Return type of the GetMappedLines command
class GetMappedLinesResponse {
private:
std::vector<int32_t> _mapped_lines_ = {}; // Mapped lines
llvm::Optional<Error> error_ = {}; // Error details if the command failed
public:
GetMappedLinesResponse() = default;
virtual ~GetMappedLinesResponse() = default;
std::vector<int32_t> GetMappedLines() const { return _mapped_lines_; }
GetMappedLinesResponse &SetMappedLines(std::vector<int32_t> value) {
_mapped_lines_ = std::move(value);
return *this;
}
llvm::Optional<Error> GetError() const { return error_; }
GetMappedLinesResponse &SetError(llvm::Optional<Error> value) {
error_ = std::move(value);
return *this;
}
};
// Return type of the EvaluateExpression command
class EvaluateExpressionResponse {
private:
std::vector<TypeInfo> type_infos_ = {};
TypeInfo root_ = {};
llvm::Optional<std::string> display_value_ = {};
llvm::Optional<int32_t> location_ = {};
llvm::Optional<int32_t> memory_address_ = {};
llvm::Optional<std::vector<int32_t>> data_ = {};
llvm::Optional<Error> error_ = {};
public:
EvaluateExpressionResponse() = default;
virtual ~EvaluateExpressionResponse() = default;
std::vector<TypeInfo> GetTypeInfos() const { return type_infos_; }
EvaluateExpressionResponse &SetTypeInfos(std::vector<TypeInfo> value) {
type_infos_ = std::move(value);
return *this;
}
TypeInfo GetRoot() const { return root_; }
EvaluateExpressionResponse &SetRoot(TypeInfo value) {
root_ = std::move(value);
return *this;
}
llvm::Optional<std::string> GetDisplayValue() const { return display_value_; }
EvaluateExpressionResponse &SetDisplayValue(llvm::Optional<std::string> value) {
display_value_ = std::move(value);
return *this;
}
llvm::Optional<int32_t> GetLocation() const { return location_; }
EvaluateExpressionResponse &SetLocation(llvm::Optional<int32_t> value) {
location_ = std::move(value);
return *this;
}
llvm::Optional<int32_t> GetMemoryAddress() const { return memory_address_; }
EvaluateExpressionResponse &SetMemoryAddress(llvm::Optional<int32_t> value) {
memory_address_ = std::move(value);
return *this;
}
llvm::Optional<std::vector<int32_t>> GetData() const { return data_; }
EvaluateExpressionResponse &SetData(llvm::Optional<std::vector<int32_t>> value) {
data_ = std::move(value);
return *this;
}
llvm::Optional<Error> GetError() const { return error_; }
EvaluateExpressionResponse &SetError(llvm::Optional<Error> value) {
error_ = std::move(value);
return *this;
}
};
class DWARFSymbolsApi {
public:
// Notify the plugin about a new script
virtual AddRawModuleResponse AddRawModule(
std::string raw_module_id, //A raw module identifier
std::string path //The path to the file with the wasm bytes
) = 0;
// Notify the plugin about a new script
virtual void RemoveRawModule(
std::string raw_module_id //The raw module identifier
) = 0;
// Find locations in raw modules from a location in a source file
virtual SourceLocationToRawLocationResponse SourceLocationToRawLocation(
std::string raw_module_id, //Module identifier
std::string source_file_url, //URL of the source file
int32_t line_number, //Line number of the location in the source file
int32_t column_number //Column number of the location in the source file
) = 0;
// Find locations in source files from a location in a raw module
virtual RawLocationToSourceLocationResponse RawLocationToSourceLocation(
std::string raw_module_id, //Module identifier
int32_t code_offset, //Offset of the location in the raw module
int32_t inline_frame_index //Index of inline frame
) = 0;
// List all variables in lexical scope at a location in a raw module
virtual ListVariablesInScopeResponse ListVariablesInScope(
std::string raw_module_id, //Module identifier
int32_t code_offset, //Offset of the location in the raw module
int32_t inline_frame_index //Index of inline frame
) = 0;
// Get function at location including inline frames.
virtual GetFunctionInfoResponse GetFunctionInfo(
std::string raw_module_id, //Module identifier
int32_t code_offset //Offset of the location in the raw module
) = 0;
// Get ranges for inlined function containing codeOffset.
virtual GetInlinedFunctionRangesResponse GetInlinedFunctionRanges(
std::string raw_module_id, //Module identifier
int32_t code_offset //Offset of the location in the raw module
) = 0;
// Get ranges for inlined functions called by function containing codeOffset.
virtual GetInlinedCalleesRangesResponse GetInlinedCalleesRanges(
std::string raw_module_id, //Module identifier
int32_t code_offset //Offset of the location in the raw module
) = 0;
virtual GetMappedLinesResponse GetMappedLines(
std::string raw_module_id, //Module identifier
std::string source_file_url //Source file URL
) = 0;
virtual EvaluateExpressionResponse EvaluateExpression(
RawLocation location,
std::string expression,
emscripten::val debug_proxy
) = 0;
};
} // namespace api
} // namespace symbols_backend
#endif // EXTENSIONS_CXX_DEBUGGING_API_H_