diff options
Diffstat (limited to 'include/lldb/Symbol/CompilerDecl.h')
-rw-r--r-- | include/lldb/Symbol/CompilerDecl.h | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/include/lldb/Symbol/CompilerDecl.h b/include/lldb/Symbol/CompilerDecl.h new file mode 100644 index 000000000000..b749e79b459a --- /dev/null +++ b/include/lldb/Symbol/CompilerDecl.h @@ -0,0 +1,135 @@ +//===-- CompilerDecl.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_CompilerDecl_h_ +#define liblldb_CompilerDecl_h_ + +#include "lldb/lldb-private.h" +#include "lldb/Core/ConstString.h" +#include "lldb/Symbol/CompilerType.h" + +namespace lldb_private { + +class CompilerDecl +{ +public: + //---------------------------------------------------------------------- + // Constructors and Destructors + //---------------------------------------------------------------------- + CompilerDecl () : + m_type_system (nullptr), + m_opaque_decl (nullptr) + { + } + + CompilerDecl (TypeSystem *type_system, void *decl) : + m_type_system (type_system), + m_opaque_decl (decl) + { + } + + ~CompilerDecl () + { + } + + //---------------------------------------------------------------------- + // Tests + //---------------------------------------------------------------------- + + explicit operator bool () const + { + return IsValid (); + } + + bool + operator < (const CompilerDecl &rhs) const + { + if (m_type_system == rhs.m_type_system) + return m_opaque_decl < rhs.m_opaque_decl; + return m_type_system < rhs.m_type_system; + } + + bool + IsValid () const + { + return m_type_system != nullptr && m_opaque_decl != nullptr; + } + + bool + IsClang () const; + + //---------------------------------------------------------------------- + // Object linked to the decl + //---------------------------------------------------------------------- + lldb::VariableSP + GetAsVariable (); + + //---------------------------------------------------------------------- + // Accessors + //---------------------------------------------------------------------- + + TypeSystem * + GetTypeSystem() const + { + return m_type_system; + } + + void * + GetOpaqueDecl() const + { + return m_opaque_decl; + } + + void + SetDecl (TypeSystem* type_system, void* decl) + { + m_type_system = type_system; + m_opaque_decl = decl; + } + + void + Clear() + { + m_type_system = nullptr; + m_opaque_decl = nullptr; + } + + ConstString + GetName () const; + + ConstString + GetMangledName () const; + + CompilerDeclContext + GetDeclContext() const; + + // If this decl represents a function, return the return type + CompilerType + GetFunctionReturnType() const; + + // If this decl represents a function, return the number of arguments for the function + size_t + GetNumFunctionArguments() const; + + // If this decl represents a function, return the argument type given a zero based argument index + CompilerType + GetFunctionArgumentType (size_t arg_idx) const; + +private: + TypeSystem *m_type_system; + void *m_opaque_decl; +}; + +bool operator == (const CompilerDecl &lhs, const CompilerDecl &rhs); +bool operator != (const CompilerDecl &lhs, const CompilerDecl &rhs); + + +} // namespace lldb_private + +#endif // #ifndef liblldb_CompilerDecl_h_ |