aboutsummaryrefslogtreecommitdiff
path: root/include/lldb/Symbol/Type.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/lldb/Symbol/Type.h')
-rw-r--r--include/lldb/Symbol/Type.h1522
1 files changed, 590 insertions, 932 deletions
diff --git a/include/lldb/Symbol/Type.h b/include/lldb/Symbol/Type.h
index 9158f28998e3..13c95e71ffeb 100644
--- a/include/lldb/Symbol/Type.h
+++ b/include/lldb/Symbol/Type.h
@@ -10,13 +10,13 @@
#ifndef liblldb_Type_h_
#define liblldb_Type_h_
-#include "lldb/lldb-private.h"
#include "lldb/Core/ClangForward.h"
#include "lldb/Core/ConstString.h"
#include "lldb/Core/UserID.h"
#include "lldb/Symbol/CompilerDecl.h"
#include "lldb/Symbol/CompilerType.h"
#include "lldb/Symbol/Declaration.h"
+#include "lldb/lldb-private.h"
#include "llvm/ADT/APSInt.h"
@@ -28,989 +28,647 @@ namespace lldb_private {
// CompilerContext allows an array of these items to be passed to
// perform detailed lookups in SymbolVendor and SymbolFile functions.
//----------------------------------------------------------------------
-struct CompilerContext
-{
- CompilerContext (CompilerContextKind t, const ConstString &n) :
- type(t),
- name(n)
- {
- }
-
- bool
- operator == (const CompilerContext &rhs) const
- {
- return type == rhs.type && name == rhs.name;
- }
-
- void
- Dump () const;
-
- CompilerContextKind type;
- ConstString name;
+struct CompilerContext {
+ CompilerContext(CompilerContextKind t, const ConstString &n)
+ : type(t), name(n) {}
+
+ bool operator==(const CompilerContext &rhs) const {
+ return type == rhs.type && name == rhs.name;
+ }
+
+ void Dump() const;
+
+ CompilerContextKind type;
+ ConstString name;
};
-class SymbolFileType :
- public std::enable_shared_from_this<SymbolFileType>,
- public UserID
- {
- public:
- SymbolFileType (SymbolFile &symbol_file, lldb::user_id_t uid) :
- UserID (uid),
- m_symbol_file (symbol_file)
- {
- }
-
- SymbolFileType (SymbolFile &symbol_file, const lldb::TypeSP &type_sp);
-
-
- ~SymbolFileType ()
- {
- }
-
- Type *
- operator->()
- {
- return GetType ();
- }
-
- Type *
- GetType ();
-
- protected:
- SymbolFile &m_symbol_file;
- lldb::TypeSP m_type_sp;
- };
-
-class Type :
- public std::enable_shared_from_this<Type>,
- public UserID
-{
+class SymbolFileType : public std::enable_shared_from_this<SymbolFileType>,
+ public UserID {
public:
- typedef enum EncodingDataTypeTag
- {
- eEncodingInvalid,
- eEncodingIsUID, ///< This type is the type whose UID is m_encoding_uid
- eEncodingIsConstUID, ///< This type is the type whose UID is m_encoding_uid with the const qualifier added
- eEncodingIsRestrictUID, ///< This type is the type whose UID is m_encoding_uid with the restrict qualifier added
- eEncodingIsVolatileUID, ///< This type is the type whose UID is m_encoding_uid with the volatile qualifier added
- eEncodingIsTypedefUID, ///< This type is pointer to a type whose UID is m_encoding_uid
- eEncodingIsPointerUID, ///< This type is pointer to a type whose UID is m_encoding_uid
- eEncodingIsLValueReferenceUID, ///< This type is L value reference to a type whose UID is m_encoding_uid
- eEncodingIsRValueReferenceUID, ///< This type is R value reference to a type whose UID is m_encoding_uid
- eEncodingIsSyntheticUID
- } EncodingDataType;
-
- // We must force the underlying type of the enum to be unsigned here. Not all compilers
- // behave the same with regards to the default underlying type of an enum, but because
- // this enum is used in an enum bitfield and integer comparisons are done with the value
- // we need to guarantee that it's always unsigned so that, for example, eResolveStateFull
- // doesn't compare less than eResolveStateUnresolved when used in a 2-bit bitfield.
- typedef enum ResolveStateTag : unsigned
- {
- eResolveStateUnresolved = 0,
- eResolveStateForward = 1,
- eResolveStateLayout = 2,
- eResolveStateFull = 3
- } ResolveState;
-
- Type (lldb::user_id_t uid,
- SymbolFile* symbol_file,
- const ConstString &name,
- uint64_t byte_size,
- SymbolContextScope *context,
- lldb::user_id_t encoding_uid,
- EncodingDataType encoding_uid_type,
- const Declaration& decl,
- const CompilerType &compiler_qual_type,
- ResolveState compiler_type_resolve_state);
-
- // This makes an invalid type. Used for functions that return a Type when they
- // get an error.
- Type();
-
- Type (const Type &rhs);
-
- const Type&
- operator= (const Type& rhs);
-
- void
- Dump(Stream *s, bool show_context);
-
- void
- DumpTypeName(Stream *s);
-
- // Since Type instances only keep a "SymbolFile *" internally, other classes
- // like TypeImpl need make sure the module is still around before playing with
- // Type instances. They can store a weak pointer to the Module;
- lldb::ModuleSP
- GetModule();
-
- void
- GetDescription (Stream *s, lldb::DescriptionLevel level, bool show_name);
-
- SymbolFile *
- GetSymbolFile()
- {
- return m_symbol_file;
- }
- const SymbolFile *
- GetSymbolFile() const
- {
- return m_symbol_file;
- }
-
- TypeList*
- GetTypeList();
-
- const ConstString&
- GetName();
-
- uint64_t
- GetByteSize();
-
- uint32_t
- GetNumChildren (bool omit_empty_base_classes);
-
- bool
- IsAggregateType ();
-
- bool
- IsValidType ()
- {
- return m_encoding_uid_type != eEncodingInvalid;
- }
-
- bool
- IsTypedef ()
- {
- return m_encoding_uid_type == eEncodingIsTypedefUID;
- }
-
- lldb::TypeSP
- GetTypedefType();
-
- const ConstString &
- GetName () const
- {
- return m_name;
- }
-
- ConstString
- GetQualifiedName ();
-
- void
- DumpValue(ExecutionContext *exe_ctx,
- Stream *s,
- const DataExtractor &data,
- uint32_t data_offset,
- bool show_type,
- bool show_summary,
- bool verbose,
- lldb::Format format = lldb::eFormatDefault);
-
- bool
- DumpValueInMemory(ExecutionContext *exe_ctx,
- Stream *s,
- lldb::addr_t address,
- AddressType address_type,
- bool show_types,
- bool show_summary,
- bool verbose);
-
- bool
- ReadFromMemory (ExecutionContext *exe_ctx,
- lldb::addr_t address,
- AddressType address_type,
- DataExtractor &data);
-
- bool
- WriteToMemory (ExecutionContext *exe_ctx,
- lldb::addr_t address,
- AddressType address_type,
- DataExtractor &data);
-
- bool
- GetIsDeclaration() const;
-
- void
- SetIsDeclaration(bool b);
-
- bool
- GetIsExternal() const;
-
- void
- SetIsExternal(bool b);
-
- lldb::Format
- GetFormat ();
-
- lldb::Encoding
- GetEncoding (uint64_t &count);
-
- SymbolContextScope *
- GetSymbolContextScope()
- {
- return m_context;
- }
- const SymbolContextScope *
- GetSymbolContextScope() const
- {
- return m_context;
- }
- void
- SetSymbolContextScope(SymbolContextScope *context)
- {
- m_context = context;
- }
-
- const lldb_private::Declaration &
- GetDeclaration () const;
-
- // Get the clang type, and resolve definitions for any
- // class/struct/union/enum types completely.
- CompilerType
- GetFullCompilerType ();
-
- // Get the clang type, and resolve definitions enough so that the type could
- // have layout performed. This allows ptrs and refs to class/struct/union/enum
- // types remain forward declarations.
- CompilerType
- GetLayoutCompilerType ();
-
- // Get the clang type and leave class/struct/union/enum types as forward
- // declarations if they haven't already been fully defined.
- CompilerType
- GetForwardCompilerType ();
-
- static int
- Compare(const Type &a, const Type &b);
-
- // From a fully qualified typename, split the type into the type basename
- // and the remaining type scope (namespaces/classes).
- static bool
- GetTypeScopeAndBasename (const char* &name_cstr,
- std::string &scope,
- std::string &basename,
- lldb::TypeClass &type_class);
- void
- SetEncodingType (Type *encoding_type)
- {
- m_encoding_type = encoding_type;
- }
-
- uint32_t
- GetEncodingMask ();
-
- bool
- IsCompleteObjCClass()
- {
- return m_flags.is_complete_objc_class;
- }
-
- void
- SetIsCompleteObjCClass(bool is_complete_objc_class)
- {
- m_flags.is_complete_objc_class = is_complete_objc_class;
- }
+ SymbolFileType(SymbolFile &symbol_file, lldb::user_id_t uid)
+ : UserID(uid), m_symbol_file(symbol_file) {}
+
+ SymbolFileType(SymbolFile &symbol_file, const lldb::TypeSP &type_sp);
+
+ ~SymbolFileType() {}
+
+ Type *operator->() { return GetType(); }
+
+ Type *GetType();
+
+protected:
+ SymbolFile &m_symbol_file;
+ lldb::TypeSP m_type_sp;
+};
+
+class Type : public std::enable_shared_from_this<Type>, public UserID {
+public:
+ typedef enum EncodingDataTypeTag {
+ eEncodingInvalid,
+ eEncodingIsUID, ///< This type is the type whose UID is m_encoding_uid
+ eEncodingIsConstUID, ///< This type is the type whose UID is m_encoding_uid
+ ///with the const qualifier added
+ eEncodingIsRestrictUID, ///< This type is the type whose UID is
+ ///m_encoding_uid with the restrict qualifier added
+ eEncodingIsVolatileUID, ///< This type is the type whose UID is
+ ///m_encoding_uid with the volatile qualifier added
+ eEncodingIsTypedefUID, ///< This type is pointer to a type whose UID is
+ ///m_encoding_uid
+ eEncodingIsPointerUID, ///< This type is pointer to a type whose UID is
+ ///m_encoding_uid
+ eEncodingIsLValueReferenceUID, ///< This type is L value reference to a type
+ ///whose UID is m_encoding_uid
+ eEncodingIsRValueReferenceUID, ///< This type is R value reference to a type
+ ///whose UID is m_encoding_uid
+ eEncodingIsSyntheticUID
+ } EncodingDataType;
+
+ // We must force the underlying type of the enum to be unsigned here. Not all
+ // compilers
+ // behave the same with regards to the default underlying type of an enum, but
+ // because
+ // this enum is used in an enum bitfield and integer comparisons are done with
+ // the value
+ // we need to guarantee that it's always unsigned so that, for example,
+ // eResolveStateFull
+ // doesn't compare less than eResolveStateUnresolved when used in a 2-bit
+ // bitfield.
+ typedef enum ResolveStateTag : unsigned {
+ eResolveStateUnresolved = 0,
+ eResolveStateForward = 1,
+ eResolveStateLayout = 2,
+ eResolveStateFull = 3
+ } ResolveState;
+
+ Type(lldb::user_id_t uid, SymbolFile *symbol_file, const ConstString &name,
+ uint64_t byte_size, SymbolContextScope *context,
+ lldb::user_id_t encoding_uid, EncodingDataType encoding_uid_type,
+ const Declaration &decl, const CompilerType &compiler_qual_type,
+ ResolveState compiler_type_resolve_state);
+
+ // This makes an invalid type. Used for functions that return a Type when
+ // they
+ // get an error.
+ Type();
+
+ Type(const Type &rhs);
+
+ const Type &operator=(const Type &rhs);
+
+ void Dump(Stream *s, bool show_context);
+
+ void DumpTypeName(Stream *s);
+
+ // Since Type instances only keep a "SymbolFile *" internally, other classes
+ // like TypeImpl need make sure the module is still around before playing with
+ // Type instances. They can store a weak pointer to the Module;
+ lldb::ModuleSP GetModule();
+
+ void GetDescription(Stream *s, lldb::DescriptionLevel level, bool show_name);
+
+ SymbolFile *GetSymbolFile() { return m_symbol_file; }
+ const SymbolFile *GetSymbolFile() const { return m_symbol_file; }
+
+ TypeList *GetTypeList();
+
+ const ConstString &GetName();
+
+ uint64_t GetByteSize();
+
+ uint32_t GetNumChildren(bool omit_empty_base_classes);
+
+ bool IsAggregateType();
+
+ bool IsValidType() { return m_encoding_uid_type != eEncodingInvalid; }
+
+ bool IsTypedef() { return m_encoding_uid_type == eEncodingIsTypedefUID; }
+
+ lldb::TypeSP GetTypedefType();
+
+ const ConstString &GetName() const { return m_name; }
+
+ ConstString GetQualifiedName();
+
+ void DumpValue(ExecutionContext *exe_ctx, Stream *s,
+ const DataExtractor &data, uint32_t data_offset,
+ bool show_type, bool show_summary, bool verbose,
+ lldb::Format format = lldb::eFormatDefault);
+
+ bool DumpValueInMemory(ExecutionContext *exe_ctx, Stream *s,
+ lldb::addr_t address, AddressType address_type,
+ bool show_types, bool show_summary, bool verbose);
+
+ bool ReadFromMemory(ExecutionContext *exe_ctx, lldb::addr_t address,
+ AddressType address_type, DataExtractor &data);
+
+ bool WriteToMemory(ExecutionContext *exe_ctx, lldb::addr_t address,
+ AddressType address_type, DataExtractor &data);
+
+ bool GetIsDeclaration() const;
+
+ void SetIsDeclaration(bool b);
+
+ bool GetIsExternal() const;
+
+ void SetIsExternal(bool b);
+
+ lldb::Format GetFormat();
+
+ lldb::Encoding GetEncoding(uint64_t &count);
+
+ SymbolContextScope *GetSymbolContextScope() { return m_context; }
+ const SymbolContextScope *GetSymbolContextScope() const { return m_context; }
+ void SetSymbolContextScope(SymbolContextScope *context) {
+ m_context = context;
+ }
+
+ const lldb_private::Declaration &GetDeclaration() const;
+
+ // Get the clang type, and resolve definitions for any
+ // class/struct/union/enum types completely.
+ CompilerType GetFullCompilerType();
+
+ // Get the clang type, and resolve definitions enough so that the type could
+ // have layout performed. This allows ptrs and refs to class/struct/union/enum
+ // types remain forward declarations.
+ CompilerType GetLayoutCompilerType();
+
+ // Get the clang type and leave class/struct/union/enum types as forward
+ // declarations if they haven't already been fully defined.
+ CompilerType GetForwardCompilerType();
+
+ static int Compare(const Type &a, const Type &b);
+
+ // From a fully qualified typename, split the type into the type basename
+ // and the remaining type scope (namespaces/classes).
+ static bool GetTypeScopeAndBasename(const char *&name_cstr,
+ std::string &scope, std::string &basename,
+ lldb::TypeClass &type_class);
+ void SetEncodingType(Type *encoding_type) { m_encoding_type = encoding_type; }
+
+ uint32_t GetEncodingMask();
+
+ bool IsCompleteObjCClass() { return m_flags.is_complete_objc_class; }
+
+ void SetIsCompleteObjCClass(bool is_complete_objc_class) {
+ m_flags.is_complete_objc_class = is_complete_objc_class;
+ }
protected:
- ConstString m_name;
- SymbolFile *m_symbol_file;
- SymbolContextScope *m_context; // The symbol context in which this type is defined
- Type *m_encoding_type;
- lldb::user_id_t m_encoding_uid;
- EncodingDataType m_encoding_uid_type;
- uint64_t m_byte_size;
- Declaration m_decl;
- CompilerType m_compiler_type;
-
- struct Flags {
+ ConstString m_name;
+ SymbolFile *m_symbol_file;
+ SymbolContextScope
+ *m_context; // The symbol context in which this type is defined
+ Type *m_encoding_type;
+ lldb::user_id_t m_encoding_uid;
+ EncodingDataType m_encoding_uid_type;
+ uint64_t m_byte_size;
+ Declaration m_decl;
+ CompilerType m_compiler_type;
+
+ struct Flags {
#ifdef __GNUC__
- // using unsigned type here to work around a very noisy gcc warning
- unsigned compiler_type_resolve_state : 2;
+ // using unsigned type here to work around a very noisy gcc warning
+ unsigned compiler_type_resolve_state : 2;
#else
- ResolveState compiler_type_resolve_state : 2;
+ ResolveState compiler_type_resolve_state : 2;
#endif
- bool is_complete_objc_class : 1;
- } m_flags;
-
- Type *
- GetEncodingType ();
-
- bool
- ResolveClangType (ResolveState compiler_type_resolve_state);
+ bool is_complete_objc_class : 1;
+ } m_flags;
+
+ Type *GetEncodingType();
+
+ bool ResolveClangType(ResolveState compiler_type_resolve_state);
};
// these classes are used to back the SBType* objects
-class TypePair
-{
+class TypePair {
public:
- TypePair () :
- compiler_type(),
- type_sp()
- {
- }
-
- TypePair (CompilerType type) :
- compiler_type(type),
- type_sp()
- {
- }
-
- TypePair (lldb::TypeSP type) :
- compiler_type(),
- type_sp(type)
- {
- compiler_type = type_sp->GetForwardCompilerType ();
- }
-
- bool
- IsValid () const
- {
- return compiler_type.IsValid() || (type_sp.get() != nullptr);
- }
-
- explicit operator bool () const
- {
- return IsValid();
- }
-
- bool
- operator == (const TypePair& rhs) const
- {
- return compiler_type == rhs.compiler_type &&
- type_sp.get() == rhs.type_sp.get();
- }
-
- bool
- operator != (const TypePair& rhs) const
- {
- return compiler_type != rhs.compiler_type ||
- type_sp.get() != rhs.type_sp.get();
- }
-
- void
- Clear ()
- {
- compiler_type.Clear();
- type_sp.reset();
- }
-
- ConstString
- GetName () const
- {
- if (type_sp)
- return type_sp->GetName();
- if (compiler_type)
- return compiler_type.GetTypeName();
- return ConstString ();
- }
-
- ConstString
- GetDisplayTypeName () const
- {
- if (type_sp)
- return type_sp->GetForwardCompilerType ().GetDisplayTypeName();
- if (compiler_type)
- return compiler_type.GetDisplayTypeName();
- return ConstString();
- }
-
- void
- SetType (CompilerType type)
- {
- type_sp.reset();
- compiler_type = type;
- }
-
- void
- SetType (lldb::TypeSP type)
- {
- type_sp = type;
- if (type_sp)
- compiler_type = type_sp->GetForwardCompilerType ();
- else
- compiler_type.Clear();
- }
-
- lldb::TypeSP
- GetTypeSP () const
- {
- return type_sp;
- }
-
- CompilerType
- GetCompilerType () const
- {
- return compiler_type;
- }
-
- CompilerType
- GetPointerType () const
- {
- if (type_sp)
- return type_sp->GetForwardCompilerType().GetPointerType();
- return compiler_type.GetPointerType();
- }
-
- CompilerType
- GetPointeeType () const
- {
- if (type_sp)
- return type_sp->GetForwardCompilerType ().GetPointeeType();
- return compiler_type.GetPointeeType();
- }
-
- CompilerType
- GetReferenceType () const
- {
- if (type_sp)
- return type_sp->GetForwardCompilerType ().GetLValueReferenceType();
- else
- return compiler_type.GetLValueReferenceType();
- }
-
- CompilerType
- GetTypedefedType () const
- {
- if (type_sp)
- return type_sp->GetForwardCompilerType ().GetTypedefedType();
- else
- return compiler_type.GetTypedefedType();
- }
-
- CompilerType
- GetDereferencedType () const
- {
- if (type_sp)
- return type_sp->GetForwardCompilerType ().GetNonReferenceType();
- else
- return compiler_type.GetNonReferenceType();
- }
-
- CompilerType
- GetUnqualifiedType () const
- {
- if (type_sp)
- return type_sp->GetForwardCompilerType ().GetFullyUnqualifiedType();
- else
- return compiler_type.GetFullyUnqualifiedType();
- }
-
- CompilerType
- GetCanonicalType () const
- {
- if (type_sp)
- return type_sp->GetForwardCompilerType ().GetCanonicalType();
- return compiler_type.GetCanonicalType();
- }
-
- TypeSystem *
- GetTypeSystem () const
- {
- return compiler_type.GetTypeSystem();
- }
-
- lldb::ModuleSP
- GetModule () const
- {
- if (type_sp)
- return type_sp->GetModule();
- return lldb::ModuleSP();
- }
+ TypePair() : compiler_type(), type_sp() {}
+
+ TypePair(CompilerType type) : compiler_type(type), type_sp() {}
+
+ TypePair(lldb::TypeSP type) : compiler_type(), type_sp(type) {
+ compiler_type = type_sp->GetForwardCompilerType();
+ }
+
+ bool IsValid() const {
+ return compiler_type.IsValid() || (type_sp.get() != nullptr);
+ }
+
+ explicit operator bool() const { return IsValid(); }
+
+ bool operator==(const TypePair &rhs) const {
+ return compiler_type == rhs.compiler_type &&
+ type_sp.get() == rhs.type_sp.get();
+ }
+
+ bool operator!=(const TypePair &rhs) const {
+ return compiler_type != rhs.compiler_type ||
+ type_sp.get() != rhs.type_sp.get();
+ }
+
+ void Clear() {
+ compiler_type.Clear();
+ type_sp.reset();
+ }
+
+ ConstString GetName() const {
+ if (type_sp)
+ return type_sp->GetName();
+ if (compiler_type)
+ return compiler_type.GetTypeName();
+ return ConstString();
+ }
+
+ ConstString GetDisplayTypeName() const {
+ if (type_sp)
+ return type_sp->GetForwardCompilerType().GetDisplayTypeName();
+ if (compiler_type)
+ return compiler_type.GetDisplayTypeName();
+ return ConstString();
+ }
+
+ void SetType(CompilerType type) {
+ type_sp.reset();
+ compiler_type = type;
+ }
+
+ void SetType(lldb::TypeSP type) {
+ type_sp = type;
+ if (type_sp)
+ compiler_type = type_sp->GetForwardCompilerType();
+ else
+ compiler_type.Clear();
+ }
+
+ lldb::TypeSP GetTypeSP() const { return type_sp; }
+
+ CompilerType GetCompilerType() const { return compiler_type; }
+
+ CompilerType GetPointerType() const {
+ if (type_sp)
+ return type_sp->GetForwardCompilerType().GetPointerType();
+ return compiler_type.GetPointerType();
+ }
+
+ CompilerType GetPointeeType() const {
+ if (type_sp)
+ return type_sp->GetForwardCompilerType().GetPointeeType();
+ return compiler_type.GetPointeeType();
+ }
+
+ CompilerType GetReferenceType() const {
+ if (type_sp)
+ return type_sp->GetForwardCompilerType().GetLValueReferenceType();
+ else
+ return compiler_type.GetLValueReferenceType();
+ }
+
+ CompilerType GetTypedefedType() const {
+ if (type_sp)
+ return type_sp->GetForwardCompilerType().GetTypedefedType();
+ else
+ return compiler_type.GetTypedefedType();
+ }
+
+ CompilerType GetDereferencedType() const {
+ if (type_sp)
+ return type_sp->GetForwardCompilerType().GetNonReferenceType();
+ else
+ return compiler_type.GetNonReferenceType();
+ }
+
+ CompilerType GetUnqualifiedType() const {
+ if (type_sp)
+ return type_sp->GetForwardCompilerType().GetFullyUnqualifiedType();
+ else
+ return compiler_type.GetFullyUnqualifiedType();
+ }
+
+ CompilerType GetCanonicalType() const {
+ if (type_sp)
+ return type_sp->GetForwardCompilerType().GetCanonicalType();
+ return compiler_type.GetCanonicalType();
+ }
+
+ TypeSystem *GetTypeSystem() const { return compiler_type.GetTypeSystem(); }
+
+ lldb::ModuleSP GetModule() const {
+ if (type_sp)
+ return type_sp->GetModule();
+ return lldb::ModuleSP();
+ }
+
protected:
- CompilerType compiler_type;
- lldb::TypeSP type_sp;
+ CompilerType compiler_type;
+ lldb::TypeSP type_sp;
};
-
+
// the two classes here are used by the public API as a backend to
// the SBType and SBTypeList classes
-
-class TypeImpl
-{
+
+class TypeImpl {
public:
-
- TypeImpl();
-
- ~TypeImpl () {}
-
- TypeImpl(const TypeImpl& rhs);
-
- TypeImpl (const lldb::TypeSP &type_sp);
-
- TypeImpl (const CompilerType &compiler_type);
-
- TypeImpl (const lldb::TypeSP &type_sp, const CompilerType &dynamic);
-
- TypeImpl (const CompilerType &compiler_type, const CompilerType &dynamic);
-
- TypeImpl (const TypePair &pair, const CompilerType &dynamic);
-
- void
- SetType (const lldb::TypeSP &type_sp);
-
- void
- SetType (const CompilerType &compiler_type);
-
- void
- SetType (const lldb::TypeSP &type_sp, const CompilerType &dynamic);
-
- void
- SetType (const CompilerType &compiler_type, const CompilerType &dynamic);
-
- void
- SetType (const TypePair &pair, const CompilerType &dynamic);
-
- TypeImpl&
- operator = (const TypeImpl& rhs);
-
- bool
- operator == (const TypeImpl& rhs) const;
-
- bool
- operator != (const TypeImpl& rhs) const;
-
- bool
- IsValid() const;
-
- explicit operator bool () const;
-
- void Clear();
-
- ConstString
- GetName () const;
-
- ConstString
- GetDisplayTypeName () const;
-
- TypeImpl
- GetPointerType () const;
-
- TypeImpl
- GetPointeeType () const;
-
- TypeImpl
- GetReferenceType () const;
-
- TypeImpl
- GetTypedefedType () const;
-
- TypeImpl
- GetDereferencedType () const;
-
- TypeImpl
- GetUnqualifiedType() const;
-
- TypeImpl
- GetCanonicalType() const;
-
- CompilerType
- GetCompilerType (bool prefer_dynamic);
-
- TypeSystem *
- GetTypeSystem (bool prefer_dynamic);
-
- bool
- GetDescription (lldb_private::Stream &strm,
- lldb::DescriptionLevel description_level);
-
+ TypeImpl();
+
+ ~TypeImpl() {}
+
+ TypeImpl(const TypeImpl &rhs);
+
+ TypeImpl(const lldb::TypeSP &type_sp);
+
+ TypeImpl(const CompilerType &compiler_type);
+
+ TypeImpl(const lldb::TypeSP &type_sp, const CompilerType &dynamic);
+
+ TypeImpl(const CompilerType &compiler_type, const CompilerType &dynamic);
+
+ TypeImpl(const TypePair &pair, const CompilerType &dynamic);
+
+ void SetType(const lldb::TypeSP &type_sp);
+
+ void SetType(const CompilerType &compiler_type);
+
+ void SetType(const lldb::TypeSP &type_sp, const CompilerType &dynamic);
+
+ void SetType(const CompilerType &compiler_type, const CompilerType &dynamic);
+
+ void SetType(const TypePair &pair, const CompilerType &dynamic);
+
+ TypeImpl &operator=(const TypeImpl &rhs);
+
+ bool operator==(const TypeImpl &rhs) const;
+
+ bool operator!=(const TypeImpl &rhs) const;
+
+ bool IsValid() const;
+
+ explicit operator bool() const;
+
+ void Clear();
+
+ ConstString GetName() const;
+
+ ConstString GetDisplayTypeName() const;
+
+ TypeImpl GetPointerType() const;
+
+ TypeImpl GetPointeeType() const;
+
+ TypeImpl GetReferenceType() const;
+
+ TypeImpl GetTypedefedType() const;
+
+ TypeImpl GetDereferencedType() const;
+
+ TypeImpl GetUnqualifiedType() const;
+
+ TypeImpl GetCanonicalType() const;
+
+ CompilerType GetCompilerType(bool prefer_dynamic);
+
+ TypeSystem *GetTypeSystem(bool prefer_dynamic);
+
+ bool GetDescription(lldb_private::Stream &strm,
+ lldb::DescriptionLevel description_level);
+
private:
-
- bool
- CheckModule (lldb::ModuleSP &module_sp) const;
+ bool CheckModule(lldb::ModuleSP &module_sp) const;
- lldb::ModuleWP m_module_wp;
- TypePair m_static_type;
- CompilerType m_dynamic_type;
+ lldb::ModuleWP m_module_wp;
+ TypePair m_static_type;
+ CompilerType m_dynamic_type;
};
-class TypeListImpl
-{
+class TypeListImpl {
public:
- TypeListImpl() :
- m_content()
- {
- }
-
- void
- Append (const lldb::TypeImplSP& type)
- {
- m_content.push_back(type);
- }
-
- class AppendVisitor
- {
- public:
- AppendVisitor(TypeListImpl &type_list) :
- m_type_list(type_list)
- {
- }
-
- void
- operator() (const lldb::TypeImplSP& type)
- {
- m_type_list.Append(type);
- }
-
- private:
- TypeListImpl &m_type_list;
- };
-
- void
- Append (const lldb_private::TypeList &type_list);
-
- lldb::TypeImplSP
- GetTypeAtIndex(size_t idx)
- {
- lldb::TypeImplSP type_sp;
- if (idx < GetSize())
- type_sp = m_content[idx];
- return type_sp;
- }
-
- size_t
- GetSize()
- {
- return m_content.size();
- }
-
+ TypeListImpl() : m_content() {}
+
+ void Append(const lldb::TypeImplSP &type) { m_content.push_back(type); }
+
+ class AppendVisitor {
+ public:
+ AppendVisitor(TypeListImpl &type_list) : m_type_list(type_list) {}
+
+ void operator()(const lldb::TypeImplSP &type) { m_type_list.Append(type); }
+
+ private:
+ TypeListImpl &m_type_list;
+ };
+
+ void Append(const lldb_private::TypeList &type_list);
+
+ lldb::TypeImplSP GetTypeAtIndex(size_t idx) {
+ lldb::TypeImplSP type_sp;
+ if (idx < GetSize())
+ type_sp = m_content[idx];
+ return type_sp;
+ }
+
+ size_t GetSize() { return m_content.size(); }
+
private:
- std::vector<lldb::TypeImplSP> m_content;
+ std::vector<lldb::TypeImplSP> m_content;
};
-
-class TypeMemberImpl
-{
+
+class TypeMemberImpl {
public:
- TypeMemberImpl () :
- m_type_impl_sp (),
- m_bit_offset (0),
- m_name (),
- m_bitfield_bit_size (0),
- m_is_bitfield (false)
-
- {
- }
-
- TypeMemberImpl (const lldb::TypeImplSP &type_impl_sp,
- uint64_t bit_offset,
- const ConstString &name,
- uint32_t bitfield_bit_size = 0,
- bool is_bitfield = false) :
- m_type_impl_sp (type_impl_sp),
- m_bit_offset (bit_offset),
- m_name (name),
- m_bitfield_bit_size (bitfield_bit_size),
- m_is_bitfield (is_bitfield)
- {
- }
-
- TypeMemberImpl (const lldb::TypeImplSP &type_impl_sp,
- uint64_t bit_offset):
- m_type_impl_sp (type_impl_sp),
- m_bit_offset (bit_offset),
- m_name (),
- m_bitfield_bit_size (0),
- m_is_bitfield (false)
- {
- if (m_type_impl_sp)
- m_name = m_type_impl_sp->GetName();
- }
-
- const lldb::TypeImplSP &
- GetTypeImpl ()
- {
- return m_type_impl_sp;
- }
-
- const ConstString &
- GetName () const
- {
- return m_name;
- }
-
- uint64_t
- GetBitOffset () const
- {
- return m_bit_offset;
- }
-
- uint32_t
- GetBitfieldBitSize () const
- {
- return m_bitfield_bit_size;
- }
-
- void
- SetBitfieldBitSize (uint32_t bitfield_bit_size)
- {
- m_bitfield_bit_size = bitfield_bit_size;
- }
-
- bool
- GetIsBitfield () const
- {
- return m_is_bitfield;
- }
-
- void
- SetIsBitfield (bool is_bitfield)
- {
- m_is_bitfield = is_bitfield;
- }
+ TypeMemberImpl()
+ : m_type_impl_sp(), m_bit_offset(0), m_name(), m_bitfield_bit_size(0),
+ m_is_bitfield(false)
+
+ {}
+
+ TypeMemberImpl(const lldb::TypeImplSP &type_impl_sp, uint64_t bit_offset,
+ const ConstString &name, uint32_t bitfield_bit_size = 0,
+ bool is_bitfield = false)
+ : m_type_impl_sp(type_impl_sp), m_bit_offset(bit_offset), m_name(name),
+ m_bitfield_bit_size(bitfield_bit_size), m_is_bitfield(is_bitfield) {}
+
+ TypeMemberImpl(const lldb::TypeImplSP &type_impl_sp, uint64_t bit_offset)
+ : m_type_impl_sp(type_impl_sp), m_bit_offset(bit_offset), m_name(),
+ m_bitfield_bit_size(0), m_is_bitfield(false) {
+ if (m_type_impl_sp)
+ m_name = m_type_impl_sp->GetName();
+ }
+
+ const lldb::TypeImplSP &GetTypeImpl() { return m_type_impl_sp; }
+
+ const ConstString &GetName() const { return m_name; }
+
+ uint64_t GetBitOffset() const { return m_bit_offset; }
+
+ uint32_t GetBitfieldBitSize() const { return m_bitfield_bit_size; }
+
+ void SetBitfieldBitSize(uint32_t bitfield_bit_size) {
+ m_bitfield_bit_size = bitfield_bit_size;
+ }
+
+ bool GetIsBitfield() const { return m_is_bitfield; }
+
+ void SetIsBitfield(bool is_bitfield) { m_is_bitfield = is_bitfield; }
protected:
- lldb::TypeImplSP m_type_impl_sp;
- uint64_t m_bit_offset;
- ConstString m_name;
- uint32_t m_bitfield_bit_size; // Bit size for bitfield members only
- bool m_is_bitfield;
+ lldb::TypeImplSP m_type_impl_sp;
+ uint64_t m_bit_offset;
+ ConstString m_name;
+ uint32_t m_bitfield_bit_size; // Bit size for bitfield members only
+ bool m_is_bitfield;
};
-
///
-/// Sometimes you can find the name of the type corresponding to an object, but we don't have debug
-/// information for it. If that is the case, you can return one of these objects, and then if it
-/// has a full type, you can use that, but if not at least you can print the name for informational
+/// Sometimes you can find the name of the type corresponding to an object, but
+/// we don't have debug
+/// information for it. If that is the case, you can return one of these
+/// objects, and then if it
+/// has a full type, you can use that, but if not at least you can print the
+/// name for informational
/// purposes.
///
-class TypeAndOrName
-{
+class TypeAndOrName {
public:
- TypeAndOrName ();
- TypeAndOrName (lldb::TypeSP &type_sp);
- TypeAndOrName (const CompilerType &compiler_type);
- TypeAndOrName (const char *type_str);
- TypeAndOrName (const TypeAndOrName &rhs);
- TypeAndOrName (ConstString &type_const_string);
-
- TypeAndOrName &
- operator= (const TypeAndOrName &rhs);
-
- bool
- operator==(const TypeAndOrName &other) const;
-
- bool
- operator!=(const TypeAndOrName &other) const;
-
- ConstString GetName () const;
-
- lldb::TypeSP
- GetTypeSP () const
- {
- return m_type_pair.GetTypeSP();
- }
-
- CompilerType
- GetCompilerType () const
- {
- return m_type_pair.GetCompilerType();
- }
-
- void
- SetName (const ConstString &type_name);
-
- void
- SetName (const char *type_name_cstr);
-
- void
- SetTypeSP (lldb::TypeSP type_sp);
-
- void
- SetCompilerType (CompilerType compiler_type);
-
- bool
- IsEmpty () const;
-
- bool
- HasName () const;
-
- bool
- HasTypeSP () const;
-
- bool
- HasCompilerType () const;
-
- bool
- HasType () const
- {
- return HasTypeSP() || HasCompilerType();
- }
-
- void
- Clear ();
-
- explicit operator bool ()
- {
- return !IsEmpty();
- }
-
+ TypeAndOrName();
+ TypeAndOrName(lldb::TypeSP &type_sp);
+ TypeAndOrName(const CompilerType &compiler_type);
+ TypeAndOrName(const char *type_str);
+ TypeAndOrName(const TypeAndOrName &rhs);
+ TypeAndOrName(ConstString &type_const_string);
+
+ TypeAndOrName &operator=(const TypeAndOrName &rhs);
+
+ bool operator==(const TypeAndOrName &other) const;
+
+ bool operator!=(const TypeAndOrName &other) const;
+
+ ConstString GetName() const;
+
+ lldb::TypeSP GetTypeSP() const { return m_type_pair.GetTypeSP(); }
+
+ CompilerType GetCompilerType() const { return m_type_pair.GetCompilerType(); }
+
+ void SetName(const ConstString &type_name);
+
+ void SetName(const char *type_name_cstr);
+
+ void SetTypeSP(lldb::TypeSP type_sp);
+
+ void SetCompilerType(CompilerType compiler_type);
+
+ bool IsEmpty() const;
+
+ bool HasName() const;
+
+ bool HasTypeSP() const;
+
+ bool HasCompilerType() const;
+
+ bool HasType() const { return HasTypeSP() || HasCompilerType(); }
+
+ void Clear();
+
+ explicit operator bool() { return !IsEmpty(); }
+
private:
- TypePair m_type_pair;
- ConstString m_type_name;
+ TypePair m_type_pair;
+ ConstString m_type_name;
};
-
-class TypeMemberFunctionImpl
-{
+
+class TypeMemberFunctionImpl {
public:
- TypeMemberFunctionImpl() :
- m_type (),
- m_decl (),
- m_name(),
- m_kind (lldb::eMemberFunctionKindUnknown)
- {
- }
-
- TypeMemberFunctionImpl (const CompilerType& type,
- const CompilerDecl& decl,
- const std::string& name,
- const lldb::MemberFunctionKind& kind) :
- m_type (type),
- m_decl (decl),
- m_name(name),
- m_kind (kind)
- {
- }
-
- bool
- IsValid ();
-
- ConstString
- GetName () const;
-
- ConstString
- GetMangledName () const;
-
- CompilerType
- GetType () const;
-
- CompilerType
- GetReturnType () const;
-
- size_t
- GetNumArguments () const;
-
- CompilerType
- GetArgumentAtIndex (size_t idx) const;
-
- lldb::MemberFunctionKind
- GetKind () const;
-
- bool
- GetDescription (Stream& stream);
-
+ TypeMemberFunctionImpl()
+ : m_type(), m_decl(), m_name(), m_kind(lldb::eMemberFunctionKindUnknown) {
+ }
+
+ TypeMemberFunctionImpl(const CompilerType &type, const CompilerDecl &decl,
+ const std::string &name,
+ const lldb::MemberFunctionKind &kind)
+ : m_type(type), m_decl(decl), m_name(name), m_kind(kind) {}
+
+ bool IsValid();
+
+ ConstString GetName() const;
+
+ ConstString GetMangledName() const;
+
+ CompilerType GetType() const;
+
+ CompilerType GetReturnType() const;
+
+ size_t GetNumArguments() const;
+
+ CompilerType GetArgumentAtIndex(size_t idx) const;
+
+ lldb::MemberFunctionKind GetKind() const;
+
+ bool GetDescription(Stream &stream);
+
protected:
- std::string
- GetPrintableTypeName ();
+ std::string GetPrintableTypeName();
private:
- CompilerType m_type;
- CompilerDecl m_decl;
- ConstString m_name;
- lldb::MemberFunctionKind m_kind;
+ CompilerType m_type;
+ CompilerDecl m_decl;
+ ConstString m_name;
+ lldb::MemberFunctionKind m_kind;
};
-class TypeEnumMemberImpl
-{
+class TypeEnumMemberImpl {
public:
- TypeEnumMemberImpl () :
- m_integer_type_sp(),
- m_name("<invalid>"),
- m_value(),
- m_valid(false)
- {
- }
-
- TypeEnumMemberImpl (const lldb::TypeImplSP &integer_type_sp,
- const ConstString &name,
- const llvm::APSInt &value);
-
- TypeEnumMemberImpl (const TypeEnumMemberImpl& rhs) :
- m_integer_type_sp(rhs.m_integer_type_sp),
- m_name(rhs.m_name),
- m_value(rhs.m_value),
- m_valid(rhs.m_valid)
- {
- }
-
- TypeEnumMemberImpl&
- operator = (const TypeEnumMemberImpl& rhs);
-
- bool
- IsValid ()
- {
- return m_valid;
- }
-
- const ConstString &
- GetName () const
- {
- return m_name;
- }
-
- const lldb::TypeImplSP &
- GetIntegerType () const
- {
- return m_integer_type_sp;
- }
-
- uint64_t
- GetValueAsUnsigned () const
- {
- return m_value.getZExtValue();
- }
-
- int64_t
- GetValueAsSigned () const
- {
- return m_value.getSExtValue();
- }
+ TypeEnumMemberImpl()
+ : m_integer_type_sp(), m_name("<invalid>"), m_value(), m_valid(false) {}
+
+ TypeEnumMemberImpl(const lldb::TypeImplSP &integer_type_sp,
+ const ConstString &name, const llvm::APSInt &value);
+
+ TypeEnumMemberImpl(const TypeEnumMemberImpl &rhs)
+ : m_integer_type_sp(rhs.m_integer_type_sp), m_name(rhs.m_name),
+ m_value(rhs.m_value), m_valid(rhs.m_valid) {}
+
+ TypeEnumMemberImpl &operator=(const TypeEnumMemberImpl &rhs);
+
+ bool IsValid() { return m_valid; }
+
+ const ConstString &GetName() const { return m_name; }
+
+ const lldb::TypeImplSP &GetIntegerType() const { return m_integer_type_sp; }
+
+ uint64_t GetValueAsUnsigned() const { return m_value.getZExtValue(); }
+
+ int64_t GetValueAsSigned() const { return m_value.getSExtValue(); }
protected:
- lldb::TypeImplSP m_integer_type_sp;
- ConstString m_name;
- llvm::APSInt m_value;
- bool m_valid;
+ lldb::TypeImplSP m_integer_type_sp;
+ ConstString m_name;
+ llvm::APSInt m_value;
+ bool m_valid;
};
-class TypeEnumMemberListImpl
-{
+class TypeEnumMemberListImpl {
public:
- TypeEnumMemberListImpl() :
- m_content()
- {
- }
-
- void
- Append (const lldb::TypeEnumMemberImplSP& type)
- {
- m_content.push_back(type);
- }
-
- void
- Append (const lldb_private::TypeEnumMemberListImpl& type_list);
-
- lldb::TypeEnumMemberImplSP
- GetTypeEnumMemberAtIndex(size_t idx)
- {
- lldb::TypeEnumMemberImplSP enum_member;
- if (idx < GetSize())
- enum_member = m_content[idx];
- return enum_member;
- }
-
- size_t
- GetSize()
- {
- return m_content.size();
- }
+ TypeEnumMemberListImpl() : m_content() {}
+
+ void Append(const lldb::TypeEnumMemberImplSP &type) {
+ m_content.push_back(type);
+ }
+
+ void Append(const lldb_private::TypeEnumMemberListImpl &type_list);
+
+ lldb::TypeEnumMemberImplSP GetTypeEnumMemberAtIndex(size_t idx) {
+ lldb::TypeEnumMemberImplSP enum_member;
+ if (idx < GetSize())
+ enum_member = m_content[idx];
+ return enum_member;
+ }
+
+ size_t GetSize() { return m_content.size(); }
private:
- std::vector<lldb::TypeEnumMemberImplSP> m_content;
+ std::vector<lldb::TypeEnumMemberImplSP> m_content;
};
} // namespace lldb_private
-#endif // liblldb_Type_h_
-
+#endif // liblldb_Type_h_