aboutsummaryrefslogtreecommitdiff
path: root/include/lldb/Core/FormatEntity.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/lldb/Core/FormatEntity.h')
-rw-r--r--include/lldb/Core/FormatEntity.h426
1 files changed, 189 insertions, 237 deletions
diff --git a/include/lldb/Core/FormatEntity.h b/include/lldb/Core/FormatEntity.h
index 659b696e61fd..b6fe9ea46bfc 100644
--- a/include/lldb/Core/FormatEntity.h
+++ b/include/lldb/Core/FormatEntity.h
@@ -17,249 +17,201 @@
// Other libraries and framework includes
// Project includes
-#include "lldb/lldb-private.h"
#include "lldb/Core/Error.h"
+#include "lldb/lldb-private.h"
-namespace llvm
-{
- class StringRef;
+namespace llvm {
+class StringRef;
} // namespace llvm
-namespace lldb_private
-{
- class FormatEntity
- {
- public:
- struct Entry
- {
- enum class Type {
- Invalid,
- ParentNumber,
- ParentString,
- InsertString,
- Root,
- String,
- Scope,
- Variable,
- VariableSynthetic,
- ScriptVariable,
- ScriptVariableSynthetic,
- AddressLoad,
- AddressFile,
- AddressLoadOrFile,
- ProcessID,
- ProcessFile,
- ScriptProcess,
- ThreadID,
- ThreadProtocolID,
- ThreadIndexID,
- ThreadName,
- ThreadQueue,
- ThreadStopReason,
- ThreadReturnValue,
- ThreadCompletedExpression,
- ScriptThread,
- ThreadInfo,
- TargetArch,
- ScriptTarget,
- ModuleFile,
- File,
- Lang,
- FrameIndex,
- FrameRegisterPC,
- FrameRegisterSP,
- FrameRegisterFP,
- FrameRegisterFlags,
- FrameRegisterByName,
- ScriptFrame,
- FunctionID,
- FunctionDidChange,
- FunctionInitialFunction,
- FunctionName,
- FunctionNameWithArgs,
- FunctionNameNoArgs,
- FunctionAddrOffset,
- FunctionAddrOffsetConcrete,
- FunctionLineOffset,
- FunctionPCOffset,
- FunctionInitial,
- FunctionChanged,
- FunctionIsOptimized,
- LineEntryFile,
- LineEntryLineNumber,
- LineEntryStartAddress,
- LineEntryEndAddress,
- CurrentPCArrow
- };
-
- enum FormatType
- {
- None,
- UInt32,
- UInt64,
- CString
- };
-
- struct Definition
- {
- const char *name;
- const char *string; // Insert this exact string into the output
- Entry::Type type;
- FormatType format_type; // uint32_t, uint64_t, cstr, or anything that can be formatted by printf or lldb::Format
- uint64_t data;
- uint32_t num_children;
- Definition *children; // An array of "num_children" Definition entries,
- bool keep_separator;
- };
-
- Entry(Type t = Type::Invalid,
- const char *s = nullptr,
- const char *f = nullptr) :
- string (s ? s : ""),
- printf_format (f ? f : ""),
- children (),
- definition (nullptr),
- type (t),
- fmt (lldb::eFormatDefault),
- number (0),
- deref (false)
- {
- }
-
- Entry (llvm::StringRef s);
- Entry (char ch);
-
- void
- AppendChar (char ch);
-
- void
- AppendText (const llvm::StringRef &s);
-
- void
- AppendText (const char *cstr);
-
- void
- AppendEntry (const Entry &&entry)
- {
- children.push_back(entry);
- }
-
- void
- Clear ()
- {
- string.clear();
- printf_format.clear();
- children.clear();
- definition = nullptr;
- type = Type::Invalid;
- fmt = lldb::eFormatDefault;
- number = 0;
- deref = false;
- }
-
- static const char *
- TypeToCString (Type t);
-
- void
- Dump (Stream &s, int depth = 0) const;
-
- bool
- operator == (const Entry &rhs) const
- {
- if (string != rhs.string)
- return false;
- if (printf_format != rhs.printf_format)
- return false;
- const size_t n = children.size();
- const size_t m = rhs.children.size();
- for (size_t i=0; i < std::min<size_t>(n, m); ++i)
- {
- if (!(children[i] == rhs.children[i]))
- return false;
- }
- if (children != rhs.children)
- return false;
- if (definition != rhs.definition)
- return false;
- if (type != rhs.type)
- return false;
- if (fmt != rhs.fmt)
- return false;
- if (deref != rhs.deref)
- return false;
- return true;
- }
-
- std::string string;
- std::string printf_format;
- std::vector<Entry> children;
- Definition *definition;
- Type type;
- lldb::Format fmt;
- lldb::addr_t number;
- bool deref;
- };
-
- static bool
- 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
- FormatStringRef (const llvm::StringRef &format,
- Stream &s,
- const SymbolContext *sc,
- const ExecutionContext *exe_ctx,
- const Address *addr,
- ValueObject* valobj,
- bool function_changed,
- bool initial_function);
-
- static bool
- FormatCString (const char *format,
- Stream &s,
- const SymbolContext *sc,
- const ExecutionContext *exe_ctx,
- const Address *addr,
- ValueObject* valobj,
- bool function_changed,
- bool initial_function);
-
- static Error
- Parse (const llvm::StringRef &format, Entry &entry);
-
- static Error
- ExtractVariableInfo (llvm::StringRef &format_str,
- llvm::StringRef &variable_name,
- llvm::StringRef &variable_format);
-
- static size_t
- AutoComplete (const char *s,
- int match_start_point,
- int max_return_elements,
- bool &word_complete,
- StringList &matches);
-
- //----------------------------------------------------------------------
- // Format the current elements into the stream \a s.
- //
- // The root element will be stripped off and the format str passed in
- // will be either an empty string (print a description of this object),
- // or contain a . separated series like a domain name that identifies
- // further sub elements to display.
- //----------------------------------------------------------------------
- static bool
- FormatFileSpec (const FileSpec &file, Stream &s, llvm::StringRef elements, llvm::StringRef element_format);
- protected:
- static Error
- ParseInternal (llvm::StringRef &format, Entry &parent_entry, uint32_t depth);
+namespace lldb_private {
+class FormatEntity {
+public:
+ struct Entry {
+ enum class Type {
+ Invalid,
+ ParentNumber,
+ ParentString,
+ InsertString,
+ Root,
+ String,
+ Scope,
+ Variable,
+ VariableSynthetic,
+ ScriptVariable,
+ ScriptVariableSynthetic,
+ AddressLoad,
+ AddressFile,
+ AddressLoadOrFile,
+ ProcessID,
+ ProcessFile,
+ ScriptProcess,
+ ThreadID,
+ ThreadProtocolID,
+ ThreadIndexID,
+ ThreadName,
+ ThreadQueue,
+ ThreadStopReason,
+ ThreadReturnValue,
+ ThreadCompletedExpression,
+ ScriptThread,
+ ThreadInfo,
+ TargetArch,
+ ScriptTarget,
+ ModuleFile,
+ File,
+ Lang,
+ FrameIndex,
+ FrameNoDebug,
+ FrameRegisterPC,
+ FrameRegisterSP,
+ FrameRegisterFP,
+ FrameRegisterFlags,
+ FrameRegisterByName,
+ ScriptFrame,
+ FunctionID,
+ FunctionDidChange,
+ FunctionInitialFunction,
+ FunctionName,
+ FunctionNameWithArgs,
+ FunctionNameNoArgs,
+ FunctionAddrOffset,
+ FunctionAddrOffsetConcrete,
+ FunctionLineOffset,
+ FunctionPCOffset,
+ FunctionInitial,
+ FunctionChanged,
+ FunctionIsOptimized,
+ LineEntryFile,
+ LineEntryLineNumber,
+ LineEntryStartAddress,
+ LineEntryEndAddress,
+ CurrentPCArrow
+ };
+ enum FormatType { None, UInt32, UInt64, CString };
+
+ struct Definition {
+ const char *name;
+ const char *string; // Insert this exact string into the output
+ Entry::Type type;
+ FormatType format_type; // uint32_t, uint64_t, cstr, or anything that can
+ // be formatted by printf or lldb::Format
+ uint64_t data;
+ uint32_t num_children;
+ Definition *children; // An array of "num_children" Definition entries,
+ bool keep_separator;
};
+
+ Entry(Type t = Type::Invalid, const char *s = nullptr,
+ const char *f = nullptr)
+ : string(s ? s : ""), printf_format(f ? f : ""), children(),
+ definition(nullptr), type(t), fmt(lldb::eFormatDefault), number(0),
+ deref(false) {}
+
+ Entry(llvm::StringRef s);
+ Entry(char ch);
+
+ void AppendChar(char ch);
+
+ void AppendText(const llvm::StringRef &s);
+
+ void AppendText(const char *cstr);
+
+ void AppendEntry(const Entry &&entry) { children.push_back(entry); }
+
+ void Clear() {
+ string.clear();
+ printf_format.clear();
+ children.clear();
+ definition = nullptr;
+ type = Type::Invalid;
+ fmt = lldb::eFormatDefault;
+ number = 0;
+ deref = false;
+ }
+
+ static const char *TypeToCString(Type t);
+
+ void Dump(Stream &s, int depth = 0) const;
+
+ bool operator==(const Entry &rhs) const {
+ if (string != rhs.string)
+ return false;
+ if (printf_format != rhs.printf_format)
+ return false;
+ const size_t n = children.size();
+ const size_t m = rhs.children.size();
+ for (size_t i = 0; i < std::min<size_t>(n, m); ++i) {
+ if (!(children[i] == rhs.children[i]))
+ return false;
+ }
+ if (children != rhs.children)
+ return false;
+ if (definition != rhs.definition)
+ return false;
+ if (type != rhs.type)
+ return false;
+ if (fmt != rhs.fmt)
+ return false;
+ if (deref != rhs.deref)
+ return false;
+ return true;
+ }
+
+ std::string string;
+ std::string printf_format;
+ std::vector<Entry> children;
+ Definition *definition;
+ Type type;
+ lldb::Format fmt;
+ lldb::addr_t number;
+ bool deref;
+ };
+
+ static bool 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 FormatStringRef(const llvm::StringRef &format, Stream &s,
+ const SymbolContext *sc,
+ const ExecutionContext *exe_ctx,
+ const Address *addr, ValueObject *valobj,
+ bool function_changed, bool initial_function);
+
+ static bool FormatCString(const char *format, Stream &s,
+ const SymbolContext *sc,
+ const ExecutionContext *exe_ctx,
+ const Address *addr, ValueObject *valobj,
+ bool function_changed, bool initial_function);
+
+ static Error Parse(const llvm::StringRef &format, Entry &entry);
+
+ static Error ExtractVariableInfo(llvm::StringRef &format_str,
+ llvm::StringRef &variable_name,
+ llvm::StringRef &variable_format);
+
+ static size_t AutoComplete(llvm::StringRef s, int match_start_point,
+ int max_return_elements, bool &word_complete,
+ StringList &matches);
+
+ //----------------------------------------------------------------------
+ // Format the current elements into the stream \a s.
+ //
+ // The root element will be stripped off and the format str passed in
+ // will be either an empty string (print a description of this object),
+ // or contain a . separated series like a domain name that identifies
+ // further sub elements to display.
+ //----------------------------------------------------------------------
+ static bool FormatFileSpec(const FileSpec &file, Stream &s,
+ llvm::StringRef elements,
+ llvm::StringRef element_format);
+
+protected:
+ static Error ParseInternal(llvm::StringRef &format, Entry &parent_entry,
+ uint32_t depth);
+};
} // namespace lldb_private
#endif // liblldb_FormatEntity_h_