#include "lldb/Core/FormatEntity.h"
#include "lldb/Core/Address.h"
#include "lldb/Core/AddressRange.h"
#include "lldb/Core/Debugger.h"
#include "lldb/Core/DumpRegisterValue.h"
#include "lldb/Core/Module.h"
#include "lldb/Core/ValueObject.h"
#include "lldb/Core/ValueObjectVariable.h"
#include "lldb/DataFormatters/DataVisualization.h"
#include "lldb/DataFormatters/FormatClasses.h"
#include "lldb/DataFormatters/FormatManager.h"
#include "lldb/DataFormatters/TypeSummary.h"
#include "lldb/Expression/ExpressionVariable.h"
#include "lldb/Interpreter/CommandInterpreter.h"
#include "lldb/Symbol/Block.h"
#include "lldb/Symbol/CompileUnit.h"
#include "lldb/Symbol/CompilerType.h"
#include "lldb/Symbol/Function.h"
#include "lldb/Symbol/LineEntry.h"
#include "lldb/Symbol/Symbol.h"
#include "lldb/Symbol/SymbolContext.h"
#include "lldb/Symbol/VariableList.h"
#include "lldb/Target/ExecutionContext.h"
#include "lldb/Target/ExecutionContextScope.h"
#include "lldb/Target/Language.h"
#include "lldb/Target/Process.h"
#include "lldb/Target/RegisterContext.h"
#include "lldb/Target/SectionLoadList.h"
#include "lldb/Target/StackFrame.h"
#include "lldb/Target/StopInfo.h"
#include "lldb/Target/Target.h"
#include "lldb/Target/Thread.h"
#include "lldb/Utility/AnsiTerminal.h"
#include "lldb/Utility/ArchSpec.h"
#include "lldb/Utility/CompletionRequest.h"
#include "lldb/Utility/ConstString.h"
#include "lldb/Utility/FileSpec.h"
#include "lldb/Utility/LLDBLog.h"
#include "lldb/Utility/Log.h"
#include "lldb/Utility/RegisterValue.h"
#include "lldb/Utility/Status.h"
#include "lldb/Utility/Stream.h"
#include "lldb/Utility/StreamString.h"
#include "lldb/Utility/StringList.h"
#include "lldb/Utility/StructuredData.h"
#include "lldb/lldb-defines.h"
#include "lldb/lldb-forward.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/Regex.h"
#include "llvm/TargetParser/Triple.h"
#include <cctype>
#include <cinttypes>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <memory>
#include <type_traits>
#include <utility>
namespace lldb_private {
class ScriptInterpreter;
}
namespace lldb_private {
struct RegisterInfo;
}
usingnamespacelldb;
usingnamespacelldb_private;
Definition;
Entry;
EntryType;
enum FileKind { … };
constexpr Definition g_string_entry[] = …;
constexpr Definition g_addr_entries[] = …;
constexpr Definition g_file_child_entries[] = …;
constexpr Definition g_frame_child_entries[] = …;
constexpr Definition g_function_child_entries[] = …;
constexpr Definition g_line_child_entries[] = …;
constexpr Definition g_module_child_entries[] = …;
constexpr Definition g_process_child_entries[] = …;
constexpr Definition g_svar_child_entries[] = …;
constexpr Definition g_var_child_entries[] = …;
constexpr Definition g_thread_child_entries[] = …;
constexpr Definition g_target_child_entries[] = …;
#define _TO_STR2(_val) …
#define _TO_STR(_val) …
constexpr Definition g_ansi_fg_entries[] = …;
constexpr Definition g_ansi_bg_entries[] = …;
constexpr Definition g_ansi_entries[] = …;
constexpr Definition g_script_child_entries[] = …;
constexpr Definition g_top_level_entries[] = …;
constexpr Definition g_root = …;
FormatEntity::Entry::Entry(llvm::StringRef s)
: … { … }
FormatEntity::Entry::Entry(char ch)
: … { … }
void FormatEntity::Entry::AppendChar(char ch) { … }
void FormatEntity::Entry::AppendText(const llvm::StringRef &s) { … }
void FormatEntity::Entry::AppendText(const char *cstr) { … }
#define ENUM_TO_CSTR …
const char *FormatEntity::Entry::TypeToCString(Type t) { … }
#undef ENUM_TO_CSTR
void FormatEntity::Entry::Dump(Stream &s, int depth) const { … }
template <typename T>
static bool RunScriptFormatKeyword(Stream &s, const SymbolContext *sc,
const ExecutionContext *exe_ctx, T t,
const char *script_function_name) { … }
static bool DumpAddressAndContent(Stream &s, const SymbolContext *sc,
const ExecutionContext *exe_ctx,
const Address &addr,
bool print_file_addr_or_load_addr) { … }
static bool DumpAddressOffsetFromFunction(Stream &s, const SymbolContext *sc,
const ExecutionContext *exe_ctx,
const Address &format_addr,
bool concrete_only, bool no_padding,
bool print_zero_offsets) { … }
static bool ScanBracketedRange(llvm::StringRef subpath,
size_t &close_bracket_index,
const char *&var_name_final_if_array_range,
int64_t &index_lower, int64_t &index_higher) { … }
static bool DumpFile(Stream &s, const FileSpec &file, FileKind file_kind) { … }
static bool DumpRegister(Stream &s, StackFrame *frame, RegisterKind reg_kind,
uint32_t reg_num, Format format) { … }
static ValueObjectSP ExpandIndexedExpression(ValueObject *valobj, size_t index,
bool deref_pointer) { … }
static char ConvertValueObjectStyleToChar(
ValueObject::ValueObjectRepresentationStyle style) { … }
static llvm::Regex LLVMFormatPattern{ … };
static bool DumpValueWithLLVMFormat(Stream &s, llvm::StringRef options,
ValueObject &valobj) { … }
static bool DumpValue(Stream &s, const SymbolContext *sc,
const ExecutionContext *exe_ctx,
const FormatEntity::Entry &entry, ValueObject *valobj) { … }
static bool DumpRegister(Stream &s, StackFrame *frame, const char *reg_name,
Format format) { … }
static bool FormatThreadExtendedInfoRecurse(
const FormatEntity::Entry &entry,
const StructuredData::ObjectSP &thread_info_dictionary,
const SymbolContext *sc, const ExecutionContext *exe_ctx, Stream &s) { … }
static inline bool IsToken(const char *var_name_begin, const char *var) { … }
static std::pair<char const *, char const *>
ParseBaseName(char const *full_name) { … }
static void PrettyPrintFunctionNameWithArgs(Stream &out_stream,
char const *full_name,
ExecutionContextScope *exe_scope,
VariableList const &args) { … }
static void FormatInlinedBlock(Stream &out_stream, Block *block) { … }
bool FormatEntity::FormatStringRef(const llvm::StringRef &format_str, Stream &s,
const SymbolContext *sc,
const ExecutionContext *exe_ctx,
const Address *addr, ValueObject *valobj,
bool function_changed,
bool initial_function) { … }
bool FormatEntity::FormatCString(const char *format, Stream &s,
const SymbolContext *sc,
const ExecutionContext *exe_ctx,
const Address *addr, ValueObject *valobj,
bool function_changed, bool initial_function) { … }
bool FormatEntity::Format(const Entry &entry, Stream &s,
const SymbolContext *sc,
const ExecutionContext *exe_ctx, const Address *addr,
ValueObject *valobj, bool function_changed,
bool initial_function) { … }
static bool DumpCommaSeparatedChildEntryNames(Stream &s,
const Definition *parent) { … }
static Status ParseEntry(const llvm::StringRef &format_str,
const Definition *parent, FormatEntity::Entry &entry) { … }
static const Definition *FindEntry(const llvm::StringRef &format_str,
const Definition *parent,
llvm::StringRef &remainder) { … }
static Status ParseInternal(llvm::StringRef &format, Entry &parent_entry,
uint32_t depth) { … }
Status FormatEntity::ExtractVariableInfo(llvm::StringRef &format_str,
llvm::StringRef &variable_name,
llvm::StringRef &variable_format) { … }
bool FormatEntity::FormatFileSpec(const FileSpec &file_spec, Stream &s,
llvm::StringRef variable_name,
llvm::StringRef variable_format) { … }
static std::string MakeMatch(const llvm::StringRef &prefix,
const char *suffix) { … }
static void AddMatches(const Definition *def, const llvm::StringRef &prefix,
const llvm::StringRef &match_prefix,
StringList &matches) { … }
void FormatEntity::AutoComplete(CompletionRequest &request) { … }
void FormatEntity::PrettyPrintFunctionArguments(
Stream &out_stream, VariableList const &args,
ExecutionContextScope *exe_scope) { … }
Status FormatEntity::Parse(const llvm::StringRef &format_str, Entry &entry) { … }