summaryrefslogtreecommitdiffstats
path: root/lldb/include/lldb/Symbol/Type.h
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/include/lldb/Symbol/Type.h')
-rw-r--r--lldb/include/lldb/Symbol/Type.h286
1 files changed, 286 insertions, 0 deletions
diff --git a/lldb/include/lldb/Symbol/Type.h b/lldb/include/lldb/Symbol/Type.h
new file mode 100644
index 00000000000..9d7810af9c0
--- /dev/null
+++ b/lldb/include/lldb/Symbol/Type.h
@@ -0,0 +1,286 @@
+//===-- Type.h --------------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Type_h_
+#define liblldb_Type_h_
+
+#include "lldb/lldb-private.h"
+#include "lldb/Core/ClangForward.h"
+#include "lldb/Core/UserID.h"
+#include "lldb/Symbol/Declaration.h"
+#include <set>
+
+namespace lldb_private {
+
+class Type : public UserID
+{
+public:
+ typedef enum
+ {
+ eTypeInvalid,
+ eIsTypeWithUID, ///< This type is the type whose UID is m_encoding_uid
+ eIsConstTypeWithUID, ///< This type is the type whose UID is m_encoding_uid with the const qualifier added
+ eIsRestrictTypeWithUID, ///< This type is the type whose UID is m_encoding_uid with the restrict qualifier added
+ eIsVolatileTypeWithUID, ///< This type is the type whose UID is m_encoding_uid with the volatile qualifier added
+ eTypedefToTypeWithUID, ///< This type is pointer to a type whose UID is m_encoding_uid
+ ePointerToTypeWithUID, ///< This type is pointer to a type whose UID is m_encoding_uid
+ eLValueReferenceToTypeWithUID, ///< This type is L value reference to a type whose UID is m_encoding_uid
+ eRValueReferenceToTypeWithUID, ///< This type is R value reference to a type whose UID is m_encoding_uid
+ eTypeUIDSynthetic
+ } EncodingUIDType;
+
+ Type(lldb::user_id_t uid,
+ SymbolFile* symbol_file,
+ const ConstString &name,
+ uint64_t byte_size,
+ SymbolContextScope *context,
+ lldb::user_id_t encoding_uid,
+ EncodingUIDType encoding_type,
+ const Declaration& decl,
+ void *clang_qual_type);
+
+ // This makes an invalid type. Used for functions that return a Type when they
+ // get an error.
+ Type();
+
+ const Type&
+ operator= (const Type& rhs);
+
+ void
+ Dump(Stream *s, bool show_context);
+
+ void
+ DumpTypeName(Stream *s);
+
+ 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 != eTypeInvalid;
+ }
+
+ void
+ SetByteSize(uint32_t byte_size);
+
+ const ConstString &
+ GetName () const
+ {
+ return m_name;
+ }
+
+ static ConstString
+ GetClangTypeName (void *clang_qual_type);
+
+ static void
+ DumpValue(ExecutionContext *exe_ctx,
+ clang::ASTContext *ast_context,
+ void *clang_qual_type,
+ Stream *s,
+ lldb::Format format,
+ const DataExtractor &data,
+ uint32_t data_offset,
+ size_t data_byte_size,
+ uint32_t bitfield_bit_size,
+ uint32_t bitfield_bit_offset,
+ bool show_types,
+ bool show_summary,
+ bool verbose,
+ uint32_t depth);
+
+ static void
+ DumpSummary (ExecutionContext *exe_ctx,
+ clang::ASTContext *ast_context,
+ void *clang_qual_type,
+ Stream *s,
+ const DataExtractor &data,
+ uint32_t data_offset,
+ size_t data_byte_size);
+
+
+ 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,
+ lldb::AddressType address_type,
+ bool show_types,
+ bool show_summary,
+ bool verbose);
+
+ static bool
+ DumpTypeValue ( Stream *s,
+ clang::ASTContext *ast_context,
+ void *clang_qual_type,
+ lldb::Format format,
+ const DataExtractor &data,
+ uint32_t data_offset,
+ size_t data_byte_size,
+ uint32_t bitfield_bit_size,
+ uint32_t bitfield_bit_offset);
+
+ static bool
+ GetValueAsScalar (clang::ASTContext *ast_context,
+ void *clang_qual_type,
+ const DataExtractor &data,
+ uint32_t data_offset,
+ size_t data_byte_size,
+ Scalar &value);
+
+ static bool
+ SetValueFromScalar (clang::ASTContext *ast_context,
+ void *clang_qual_type,
+ const Scalar &value,
+ Stream &strm);
+
+ bool
+ ReadFromMemory (ExecutionContext *exe_ctx,
+ lldb::addr_t address,
+ lldb::AddressType address_type,
+ DataExtractor &data);
+
+ bool
+ WriteToMemory (ExecutionContext *exe_ctx,
+ lldb::addr_t address,
+ lldb::AddressType address_type,
+ DataExtractor &data);
+
+
+ static bool
+ ReadFromMemory (ExecutionContext *exe_ctx,
+ clang::ASTContext *ast_context,
+ void *clang_qual_type,
+ lldb::addr_t addr,
+ lldb::AddressType address_type,
+ DataExtractor &data);
+
+ static bool
+ WriteToMemory (ExecutionContext *exe_ctx,
+ clang::ASTContext *ast_context,
+ void *clang_qual_type,
+ lldb::addr_t addr,
+ lldb::AddressType address_type,
+ StreamString &new_value);
+
+ bool
+ GetIsDeclaration() const;
+
+ void
+ SetIsDeclaration(bool b);
+
+ bool
+ GetIsExternal() const;
+
+ void
+ SetIsExternal(bool b);
+
+ lldb::Format
+ GetFormat ();
+
+ lldb::Encoding
+ GetEncoding (uint32_t &count);
+
+ static lldb::Encoding
+ GetEncoding (void *clang_qual_type, uint32_t &count);
+
+ SymbolContextScope *
+ GetSymbolContextScope()
+ {
+ return m_context;
+ }
+ const SymbolContextScope *
+ GetSymbolContextScope() const
+ {
+ return m_context;
+ }
+ void
+ SetSymbolContextScope(SymbolContextScope *context)
+ {
+ m_context = context;
+ }
+
+ void *
+ GetOpaqueClangQualType ();
+
+ clang::ASTContext *
+ GetClangAST ();
+
+ ClangASTContext &
+ GetClangASTContext ();
+
+ void *
+ GetChildClangTypeAtIndex (const char *parent_name,
+ uint32_t idx,
+ bool transparent_pointers,
+ bool omit_empty_base_classes,
+ ConstString& name,
+ uint32_t &child_byte_size,
+ int32_t &child_byte_offset,
+ uint32_t &child_bitfield_bit_size,
+ uint32_t &child_bitfield_bit_offset);
+
+ static int
+ Compare(const Type &a, const Type &b);
+
+ static lldb::Format
+ GetFormat (void *clang_qual_type);
+
+ static int
+ DumpClangTypeName(Stream *s, void *clang_qual_type);
+
+protected:
+ ConstString m_name;
+ uint64_t m_byte_size;
+ SymbolFile *m_symbol_file;
+ SymbolContextScope *m_context; // The symbol context in which this type is defined
+ lldb::user_id_t m_encoding_uid;
+ EncodingUIDType m_encoding_uid_type;
+ Declaration m_decl;
+ void *m_clang_qual_type;
+
+ bool ResolveClangType();
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Type_h_
+
OpenPOWER on IntegriCloud