Author: gclayton Date: Tue Nov 10 11:47:04 2015 New Revision: 252622 URL: http://llvm.org/viewvc/llvm-project?rev=252622&view=rev Log: Fixed TypeMemberFunctionImpl to not use clang types directly but use the new CompilerDecl class to do the job in an abstract way. Fixed a crash that would happen if you tried to get the name of a constructor or destructor by calling "getDeclName()" instead of calling getName() (which would assert and crash).
Added the ability to get function arguments names from SBFunction. Modified: lldb/trunk/include/lldb/API/SBFunction.h lldb/trunk/include/lldb/API/SBType.h lldb/trunk/include/lldb/Symbol/ClangASTContext.h lldb/trunk/include/lldb/Symbol/CompilerDecl.h lldb/trunk/include/lldb/Symbol/Type.h lldb/trunk/include/lldb/Symbol/TypeSystem.h lldb/trunk/scripts/Python/python-extensions.swig lldb/trunk/scripts/interface/SBFunction.i lldb/trunk/scripts/interface/SBType.i lldb/trunk/source/API/SBFunction.cpp lldb/trunk/source/API/SBType.cpp lldb/trunk/source/Symbol/ClangASTContext.cpp lldb/trunk/source/Symbol/CompilerDecl.cpp lldb/trunk/source/Symbol/Type.cpp lldb/trunk/source/Symbol/TypeSystem.cpp Modified: lldb/trunk/include/lldb/API/SBFunction.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/API/SBFunction.h?rev=252622&r1=252621&r2=252622&view=diff ============================================================================== --- lldb/trunk/include/lldb/API/SBFunction.h (original) +++ lldb/trunk/include/lldb/API/SBFunction.h Tue Nov 10 11:47:04 2015 @@ -53,6 +53,9 @@ public: lldb::SBAddress GetEndAddress (); + const char * + GetArgumentName (uint32_t arg_idx); + uint32_t GetPrologueByteSize (); Modified: lldb/trunk/include/lldb/API/SBType.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/API/SBType.h?rev=252622&r1=252621&r2=252622&view=diff ============================================================================== --- lldb/trunk/include/lldb/API/SBType.h (original) +++ lldb/trunk/include/lldb/API/SBType.h Tue Nov 10 11:47:04 2015 @@ -85,7 +85,13 @@ public: const char * GetName (); - + + const char * + GetDemangledName (); + + const char * + GetMangledName (); + lldb::SBType GetType (); Modified: lldb/trunk/include/lldb/Symbol/ClangASTContext.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/ClangASTContext.h?rev=252622&r1=252621&r2=252622&view=diff ============================================================================== --- lldb/trunk/include/lldb/Symbol/ClangASTContext.h (original) +++ lldb/trunk/include/lldb/Symbol/ClangASTContext.h Tue Nov 10 11:47:04 2015 @@ -117,6 +117,9 @@ public: clang::DiagnosticConsumer * getDiagnosticConsumer(); + clang::MangleContext * + getMangleContext(); + std::shared_ptr<clang::TargetOptions> &getTargetOptions(); clang::TargetInfo * @@ -533,6 +536,21 @@ public: ConstString DeclGetName (void *opaque_decl) override; + ConstString + DeclGetMangledName (void *opaque_decl) override; + + CompilerDeclContext + DeclGetDeclContext (void *opaque_decl) override; + + CompilerType + DeclGetFunctionReturnType(void *opaque_decl) override; + + size_t + DeclGetFunctionNumArguments(void *opaque_decl) override; + + CompilerType + DeclGetFunctionArgumentType (void *opaque_decl, size_t arg_idx) override; + //---------------------------------------------------------------------- // CompilerDeclContext override functions //---------------------------------------------------------------------- @@ -1161,6 +1179,7 @@ protected: std::unique_ptr<clang::Builtin::Context> m_builtins_ap; std::unique_ptr<DWARFASTParser> m_dwarf_ast_parser_ap; std::unique_ptr<ClangASTSource> m_scratch_ast_source_ap; + std::unique_ptr<clang::MangleContext> m_mangle_ctx_ap; CompleteTagDeclCallback m_callback_tag_decl; CompleteObjCInterfaceDeclCallback m_callback_objc_decl; void * m_callback_baton; Modified: lldb/trunk/include/lldb/Symbol/CompilerDecl.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/CompilerDecl.h?rev=252622&r1=252621&r2=252622&view=diff ============================================================================== --- lldb/trunk/include/lldb/Symbol/CompilerDecl.h (original) +++ lldb/trunk/include/lldb/Symbol/CompilerDecl.h Tue Nov 10 11:47:04 2015 @@ -12,6 +12,7 @@ #include "lldb/lldb-private.h" #include "lldb/Core/ConstString.h" +#include "lldb/Symbol/CompilerType.h" namespace lldb_private { @@ -102,6 +103,24 @@ public: 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; Modified: lldb/trunk/include/lldb/Symbol/Type.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/Type.h?rev=252622&r1=252621&r2=252622&view=diff ============================================================================== --- lldb/trunk/include/lldb/Symbol/Type.h (original) +++ lldb/trunk/include/lldb/Symbol/Type.h Tue Nov 10 11:47:04 2015 @@ -14,6 +14,7 @@ #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" @@ -823,50 +824,33 @@ class TypeMemberFunctionImpl { public: TypeMemberFunctionImpl() : - m_type(), - m_objc_method_decl(nullptr), + m_type (), + m_decl (), m_name(), - m_kind(lldb::eMemberFunctionKindUnknown) + m_kind (lldb::eMemberFunctionKindUnknown) { } TypeMemberFunctionImpl (const CompilerType& type, + const CompilerDecl& decl, const std::string& name, const lldb::MemberFunctionKind& kind) : - m_type(type), - m_objc_method_decl(nullptr), + m_type (type), + m_decl (decl), m_name(name), - m_kind(kind) + m_kind (kind) { } - TypeMemberFunctionImpl (clang::ObjCMethodDecl *method, - const std::string& name, - const lldb::MemberFunctionKind& kind) : - m_type(), - m_objc_method_decl(method), - m_name(name), - m_kind(kind) - { - } - - TypeMemberFunctionImpl (const TypeMemberFunctionImpl& rhs) : - m_type(rhs.m_type), - m_objc_method_decl(rhs.m_objc_method_decl), - m_name(rhs.m_name), - m_kind(rhs.m_kind) - { - } - - TypeMemberFunctionImpl& - operator = (const TypeMemberFunctionImpl& rhs); - bool IsValid (); ConstString GetName () const; - + + ConstString + GetMangledName () const; + CompilerType GetType () const; @@ -891,7 +875,7 @@ protected: private: CompilerType m_type; - clang::ObjCMethodDecl *m_objc_method_decl; + CompilerDecl m_decl; ConstString m_name; lldb::MemberFunctionKind m_kind; }; Modified: lldb/trunk/include/lldb/Symbol/TypeSystem.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/TypeSystem.h?rev=252622&r1=252621&r2=252622&view=diff ============================================================================== --- lldb/trunk/include/lldb/Symbol/TypeSystem.h (original) +++ lldb/trunk/include/lldb/Symbol/TypeSystem.h Tue Nov 10 11:47:04 2015 @@ -116,12 +116,27 @@ public: virtual ConstString DeclGetName (void *opaque_decl) = 0; + virtual ConstString + DeclGetMangledName (void *opaque_decl); + virtual lldb::VariableSP DeclGetVariable (void *opaque_decl) = 0; virtual void DeclLinkToObject (void *opaque_decl, std::shared_ptr<void> object) = 0; + virtual CompilerDeclContext + DeclGetDeclContext (void *opaque_decl); + + virtual CompilerType + DeclGetFunctionReturnType(void *opaque_decl); + + virtual size_t + DeclGetFunctionNumArguments(void *opaque_decl); + + virtual CompilerType + DeclGetFunctionArgumentType (void *opaque_decl, size_t arg_idx); + //---------------------------------------------------------------------- // CompilerDeclContext functions //---------------------------------------------------------------------- Modified: lldb/trunk/scripts/Python/python-extensions.swig URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/Python/python-extensions.swig?rev=252622&r1=252621&r2=252622&view=diff ============================================================================== --- lldb/trunk/scripts/Python/python-extensions.swig (original) +++ lldb/trunk/scripts/Python/python-extensions.swig Tue Nov 10 11:47:04 2015 @@ -608,6 +608,20 @@ return lldb_private::PythonString("").release(); } } +%extend lldb::SBTypeMemberFunction { + PyObject *lldb::SBTypeMemberFunction::__str__ (){ + lldb::SBStream description; + $self->GetDescription (description, lldb::eDescriptionLevelBrief); + const char *desc = description.GetData(); + size_t desc_len = description.GetSize(); + if (desc_len > 0 && (desc[desc_len-1] == '\n' || desc[desc_len-1] == '\r')) + --desc_len; + if (desc_len > 0) + return lldb_private::PythonString(llvm::StringRef(desc, desc_len)).release(); + else + return lldb_private::PythonString("").release(); + } +} %extend lldb::SBTypeEnumMember { PyObject *lldb::SBTypeEnumMember::__str__ (){ lldb::SBStream description; Modified: lldb/trunk/scripts/interface/SBFunction.i URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/interface/SBFunction.i?rev=252622&r1=252621&r2=252622&view=diff ============================================================================== --- lldb/trunk/scripts/interface/SBFunction.i (original) +++ lldb/trunk/scripts/interface/SBFunction.i Tue Nov 10 11:47:04 2015 @@ -77,6 +77,9 @@ public: lldb::SBAddress GetEndAddress (); + const char * + GetArgumentName (uint32_t arg_idx); + uint32_t GetPrologueByteSize (); Modified: lldb/trunk/scripts/interface/SBType.i URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/interface/SBType.i?rev=252622&r1=252621&r2=252622&view=diff ============================================================================== --- lldb/trunk/scripts/interface/SBType.i (original) +++ lldb/trunk/scripts/interface/SBType.i Tue Nov 10 11:47:04 2015 @@ -83,6 +83,12 @@ public: const char * GetName (); + const char * + GetDemangledName (); + + const char * + GetMangledName (); + lldb::SBType GetType (); Modified: lldb/trunk/source/API/SBFunction.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBFunction.cpp?rev=252622&r1=252621&r2=252622&view=diff ============================================================================== --- lldb/trunk/source/API/SBFunction.cpp (original) +++ lldb/trunk/source/API/SBFunction.cpp Tue Nov 10 11:47:04 2015 @@ -16,6 +16,7 @@ #include "lldb/Symbol/CompileUnit.h" #include "lldb/Symbol/Function.h" #include "lldb/Symbol/Type.h" +#include "lldb/Symbol/VariableList.h" #include "lldb/Target/ExecutionContext.h" #include "lldb/Target/Target.h" @@ -216,6 +217,24 @@ SBFunction::GetEndAddress () return addr; } +const char * +SBFunction::GetArgumentName (uint32_t arg_idx) +{ + if (m_opaque_ptr) + { + Block &block = m_opaque_ptr->GetBlock(true); + VariableListSP variable_list_sp = block.GetBlockVariableList(true); + if (variable_list_sp) + { + VariableList arguments; + variable_list_sp->AppendVariablesWithScope (eValueTypeVariableArgument, arguments, true); + lldb::VariableSP variable_sp = arguments.GetVariableAtIndex(arg_idx); + if (variable_sp) + return variable_sp->GetName().GetCString(); + } + } + return nullptr; +} uint32_t SBFunction::GetPrologueByteSize () Modified: lldb/trunk/source/API/SBType.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBType.cpp?rev=252622&r1=252621&r2=252622&view=diff ============================================================================== --- lldb/trunk/source/API/SBType.cpp (original) +++ lldb/trunk/source/API/SBType.cpp Tue Nov 10 11:47:04 2015 @@ -13,6 +13,7 @@ #include "lldb/API/SBStream.h" #include "lldb/Core/ConstString.h" #include "lldb/Core/Log.h" +#include "lldb/Core/Mangled.h" #include "lldb/Core/Stream.h" #include "lldb/Symbol/CompilerType.h" #include "lldb/Symbol/Type.h" @@ -784,6 +785,30 @@ SBTypeMemberFunction::GetName () return NULL; } +const char * +SBTypeMemberFunction::GetDemangledName () +{ + if (m_opaque_sp) + { + ConstString mangled_str = m_opaque_sp->GetMangledName(); + if (mangled_str) + { + Mangled mangled(mangled_str, true); + return mangled.GetDemangledName(mangled.GuessLanguage()).GetCString(); + } + } + return NULL; +} + +const char * +SBTypeMemberFunction::GetMangledName() +{ + if (m_opaque_sp) + return m_opaque_sp->GetMangledName().GetCString(); + return NULL; +} + + SBType SBTypeMemberFunction::GetType () { Modified: lldb/trunk/source/Symbol/ClangASTContext.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/ClangASTContext.cpp?rev=252622&r1=252621&r2=252622&view=diff ============================================================================== --- lldb/trunk/source/Symbol/ClangASTContext.cpp (original) +++ lldb/trunk/source/Symbol/ClangASTContext.cpp Tue Nov 10 11:47:04 2015 @@ -40,6 +40,7 @@ #include "clang/AST/CXXInheritance.h" #include "clang/AST/DeclObjC.h" #include "clang/AST/DeclTemplate.h" +#include "clang/AST/Mangle.h" #include "clang/AST/RecordLayout.h" #include "clang/AST/Type.h" #include "clang/AST/VTableBuilder.h" @@ -662,6 +663,14 @@ ClangASTContext::getDiagnosticsEngine() return m_diagnostics_engine_ap.get(); } +clang::MangleContext * +ClangASTContext::getMangleContext() +{ + if (m_mangle_ctx_ap.get() == nullptr) + m_mangle_ctx_ap.reset (getASTContext()->createMangleContext()); + return m_mangle_ctx_ap.get(); +} + class NullDiagnosticConsumer : public DiagnosticConsumer { public: @@ -4114,10 +4123,10 @@ ClangASTContext::GetNumMemberFunctions ( TypeMemberFunctionImpl ClangASTContext::GetMemberFunctionAtIndex (lldb::opaque_compiler_type_t type, size_t idx) { - std::string name(""); + std::string name; MemberFunctionKind kind(MemberFunctionKind::eMemberFunctionKindUnknown); - CompilerType clang_type{}; - clang::ObjCMethodDecl *method_decl(nullptr); + CompilerType clang_type; + CompilerDecl clang_decl; if (type) { clang::QualType qual_type(GetCanonicalQualType(type)); @@ -4136,22 +4145,20 @@ ClangASTContext::GetMemberFunctionAtInde if (idx < static_cast<size_t>(std::distance(method_iter, method_end))) { std::advance(method_iter, idx); - auto method_decl = method_iter->getCanonicalDecl(); - if (method_decl) + clang::CXXMethodDecl *cxx_method_decl = method_iter->getCanonicalDecl(); + if (cxx_method_decl) { - if (!method_decl->getName().empty()) - name.assign(method_decl->getName().data()); - else - name.clear(); - if (method_decl->isStatic()) + name = cxx_method_decl->getDeclName().getAsString(); + if (cxx_method_decl->isStatic()) kind = lldb::eMemberFunctionKindStaticMethod; - else if (llvm::isa<clang::CXXConstructorDecl>(method_decl)) + else if (llvm::isa<clang::CXXConstructorDecl>(cxx_method_decl)) kind = lldb::eMemberFunctionKindConstructor; - else if (llvm::isa<clang::CXXDestructorDecl>(method_decl)) + else if (llvm::isa<clang::CXXDestructorDecl>(cxx_method_decl)) kind = lldb::eMemberFunctionKindDestructor; else kind = lldb::eMemberFunctionKindInstanceMethod; - clang_type = CompilerType(getASTContext(),method_decl->getType()); + clang_type = CompilerType(this, cxx_method_decl->getType().getAsOpaquePtr()); + clang_decl = CompilerDecl(this, cxx_method_decl); } } } @@ -4172,11 +4179,12 @@ ClangASTContext::GetMemberFunctionAtInde if (idx < static_cast<size_t>(std::distance(method_iter, method_end))) { std::advance(method_iter, idx); - method_decl = method_iter->getCanonicalDecl(); - if (method_decl) + clang::ObjCMethodDecl *objc_method_decl = method_iter->getCanonicalDecl(); + if (objc_method_decl) { - name = method_decl->getSelector().getAsString(); - if (method_decl->isClassMethod()) + clang_decl = CompilerDecl(this, objc_method_decl); + name = objc_method_decl->getSelector().getAsString(); + if (objc_method_decl->isClassMethod()) kind = lldb::eMemberFunctionKindStaticMethod; else kind = lldb::eMemberFunctionKindInstanceMethod; @@ -4202,11 +4210,12 @@ ClangASTContext::GetMemberFunctionAtInde if (idx < static_cast<size_t>(std::distance(method_iter, method_end))) { std::advance(method_iter, idx); - method_decl = method_iter->getCanonicalDecl(); - if (method_decl) + clang::ObjCMethodDecl *objc_method_decl = method_iter->getCanonicalDecl(); + if (objc_method_decl) { - name = method_decl->getSelector().getAsString(); - if (method_decl->isClassMethod()) + clang_decl = CompilerDecl(this, objc_method_decl); + name = objc_method_decl->getSelector().getAsString(); + if (objc_method_decl->isClassMethod()) kind = lldb::eMemberFunctionKindStaticMethod; else kind = lldb::eMemberFunctionKindInstanceMethod; @@ -4233,12 +4242,8 @@ ClangASTContext::GetMemberFunctionAtInde if (kind == eMemberFunctionKindUnknown) return TypeMemberFunctionImpl(); - if (method_decl) - return TypeMemberFunctionImpl(method_decl, name, kind); - if (type) - return TypeMemberFunctionImpl(clang_type, name, kind); - - return TypeMemberFunctionImpl(); + else + return TypeMemberFunctionImpl(clang_type, clang_decl, name, kind); } CompilerType @@ -9071,11 +9076,95 @@ ClangASTContext::DeclGetName (void *opaq { clang::NamedDecl *nd = llvm::dyn_cast<NamedDecl>((clang::Decl*)opaque_decl); if (nd != nullptr) - return ConstString(nd->getName()); + return ConstString(nd->getDeclName().getAsString()); } return ConstString(); } +ConstString +ClangASTContext::DeclGetMangledName (void *opaque_decl) +{ + if (opaque_decl) + { + clang::NamedDecl *nd = llvm::dyn_cast<clang::NamedDecl>((clang::Decl*)opaque_decl); + if (nd != nullptr && !llvm::isa<clang::ObjCMethodDecl>(nd)) + { + clang::MangleContext *mc = getMangleContext(); + if (mc && mc->shouldMangleCXXName(nd)) + { + llvm::SmallVector<char, 1024> buf; + llvm::raw_svector_ostream llvm_ostrm (buf); + if (llvm::isa<clang::CXXConstructorDecl>(nd)) + { + mc->mangleCXXCtor(llvm::dyn_cast<clang::CXXConstructorDecl>(nd), Ctor_Complete, llvm_ostrm); + } + else if (llvm::isa<clang::CXXDestructorDecl>(nd)) + { + mc->mangleCXXDtor(llvm::dyn_cast<clang::CXXDestructorDecl>(nd), Dtor_Complete, llvm_ostrm); + } + else + { + mc->mangleName(nd, llvm_ostrm); + } + if (buf.size() > 0) + return ConstString(buf.data(), buf.size()); + } + } + } + return ConstString(); +} + +CompilerDeclContext +ClangASTContext::DeclGetDeclContext (void *opaque_decl) +{ + if (opaque_decl) + return CompilerDeclContext(this, ((clang::Decl*)opaque_decl)->getDeclContext()); + else + return CompilerDeclContext(); +} + +CompilerType +ClangASTContext::DeclGetFunctionReturnType(void *opaque_decl) +{ + if (clang::FunctionDecl *func_decl = llvm::dyn_cast<clang::FunctionDecl>((clang::Decl*)opaque_decl)) + return CompilerType(this, func_decl->getReturnType().getAsOpaquePtr()); + if (clang::ObjCMethodDecl *objc_method = llvm::dyn_cast<clang::ObjCMethodDecl>((clang::Decl*)opaque_decl)) + return CompilerType(this, objc_method->getReturnType().getAsOpaquePtr()); + else + return CompilerType(); +} + +size_t +ClangASTContext::DeclGetFunctionNumArguments(void *opaque_decl) +{ + if (clang::FunctionDecl *func_decl = llvm::dyn_cast<clang::FunctionDecl>((clang::Decl*)opaque_decl)) + return func_decl->param_size(); + if (clang::ObjCMethodDecl *objc_method = llvm::dyn_cast<clang::ObjCMethodDecl>((clang::Decl*)opaque_decl)) + return objc_method->param_size(); + else + return 0; +} + +CompilerType +ClangASTContext::DeclGetFunctionArgumentType (void *opaque_decl, size_t idx) +{ + if (clang::FunctionDecl *func_decl = llvm::dyn_cast<clang::FunctionDecl>((clang::Decl*)opaque_decl)) + { + if (idx < func_decl->param_size()) + { + ParmVarDecl *var_decl = func_decl->getParamDecl(idx); + if (var_decl) + return CompilerType(this, var_decl->getOriginalType().getAsOpaquePtr()); + } + } + else if (clang::ObjCMethodDecl *objc_method = llvm::dyn_cast<clang::ObjCMethodDecl>((clang::Decl*)opaque_decl)) + { + if (idx < objc_method->param_size()) + return CompilerType(this, objc_method->parameters()[idx]->getOriginalType().getAsOpaquePtr()); + } + return CompilerType(); +} + //---------------------------------------------------------------------- // CompilerDeclContext functions //---------------------------------------------------------------------- Modified: lldb/trunk/source/Symbol/CompilerDecl.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/CompilerDecl.cpp?rev=252622&r1=252621&r2=252622&view=diff ============================================================================== --- lldb/trunk/source/Symbol/CompilerDecl.cpp (original) +++ lldb/trunk/source/Symbol/CompilerDecl.cpp Tue Nov 10 11:47:04 2015 @@ -25,12 +25,42 @@ CompilerDecl::GetName() const return m_type_system->DeclGetName(m_opaque_decl); } +ConstString +CompilerDecl::GetMangledName () const +{ + return m_type_system->DeclGetMangledName(m_opaque_decl); +} + lldb::VariableSP CompilerDecl::GetAsVariable () { return m_type_system->DeclGetVariable(m_opaque_decl); } +CompilerDeclContext +CompilerDecl::GetDeclContext() const +{ + return m_type_system->DeclGetDeclContext(m_opaque_decl); +} + +CompilerType +CompilerDecl::GetFunctionReturnType() const +{ + return m_type_system->DeclGetFunctionReturnType(m_opaque_decl); +} + +size_t +CompilerDecl::GetNumFunctionArguments() const +{ + return m_type_system->DeclGetFunctionNumArguments(m_opaque_decl); +} + +CompilerType +CompilerDecl::GetFunctionArgumentType (size_t arg_idx) const +{ + return m_type_system->DeclGetFunctionArgumentType(m_opaque_decl, arg_idx); +} + bool lldb_private::operator == (const lldb_private::CompilerDecl &lhs, const lldb_private::CompilerDecl &rhs) { Modified: lldb/trunk/source/Symbol/Type.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/Type.cpp?rev=252622&r1=252621&r2=252622&view=diff ============================================================================== --- lldb/trunk/source/Symbol/Type.cpp (original) +++ lldb/trunk/source/Symbol/Type.cpp Tue Nov 10 11:47:04 2015 @@ -1253,19 +1253,6 @@ TypeImpl::GetDescription (lldb_private:: return true; } -TypeMemberFunctionImpl& -TypeMemberFunctionImpl::operator = (const TypeMemberFunctionImpl& rhs) -{ - if (this != &rhs) - { - m_type = rhs.m_type; - m_objc_method_decl = rhs.m_objc_method_decl; - m_name = rhs.m_name; - m_kind = rhs.m_kind; - } - return *this; -} - bool TypeMemberFunctionImpl::IsValid () { @@ -1278,6 +1265,12 @@ TypeMemberFunctionImpl::GetName () const return m_name; } +ConstString +TypeMemberFunctionImpl::GetMangledName () const +{ + return m_decl.GetMangledName(); +} + CompilerType TypeMemberFunctionImpl::GetType () const { @@ -1290,21 +1283,6 @@ TypeMemberFunctionImpl::GetKind () const return m_kind; } -std::string -TypeMemberFunctionImpl::GetPrintableTypeName () -{ - if (m_type) - return m_type.GetTypeName().AsCString("<unknown>"); - if (m_objc_method_decl) - { - if (m_objc_method_decl->getClassInterface()) - { - return m_objc_method_decl->getClassInterface()->getName(); - } - } - return "<unknown>"; -} - bool TypeMemberFunctionImpl::GetDescription (Stream& stream) { @@ -1312,20 +1290,20 @@ TypeMemberFunctionImpl::GetDescription ( case lldb::eMemberFunctionKindUnknown: return false; case lldb::eMemberFunctionKindConstructor: - stream.Printf("constructor for %s", GetPrintableTypeName().c_str()); + stream.Printf("constructor for %s", m_type.GetTypeName().AsCString("<unknown>")); break; case lldb::eMemberFunctionKindDestructor: - stream.Printf("destructor for %s", GetPrintableTypeName().c_str()); + stream.Printf("destructor for %s", m_type.GetTypeName().AsCString("<unknown>")); break; case lldb::eMemberFunctionKindInstanceMethod: stream.Printf("instance method %s of type %s", m_name.AsCString(), - GetPrintableTypeName().c_str()); + m_decl.GetDeclContext().GetName().AsCString()); break; case lldb::eMemberFunctionKindStaticMethod: stream.Printf("static method %s of type %s", m_name.AsCString(), - GetPrintableTypeName().c_str()); + m_decl.GetDeclContext().GetName().AsCString()); break; } return true; @@ -1336,9 +1314,7 @@ TypeMemberFunctionImpl::GetReturnType () { if (m_type) return m_type.GetFunctionReturnType(); - if (m_objc_method_decl) - return CompilerType(&m_objc_method_decl->getASTContext(), m_objc_method_decl->getReturnType()); - return CompilerType(); + return m_decl.GetFunctionReturnType(); } size_t @@ -1346,9 +1322,8 @@ TypeMemberFunctionImpl::GetNumArguments { if (m_type) return m_type.GetNumberOfFunctionArguments(); - if (m_objc_method_decl) - return m_objc_method_decl->param_size(); - return 0; + else + return m_decl.GetNumFunctionArguments(); } CompilerType @@ -1356,12 +1331,8 @@ TypeMemberFunctionImpl::GetArgumentAtInd { if (m_type) return m_type.GetFunctionArgumentAtIndex (idx); - if (m_objc_method_decl) - { - if (idx < m_objc_method_decl->param_size()) - return CompilerType(&m_objc_method_decl->getASTContext(), m_objc_method_decl->parameters()[idx]->getOriginalType()); - } - return CompilerType(); + else + return m_decl.GetFunctionArgumentType(idx); } TypeEnumMemberImpl::TypeEnumMemberImpl (const lldb::TypeImplSP &integer_type_sp, Modified: lldb/trunk/source/Symbol/TypeSystem.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/TypeSystem.cpp?rev=252622&r1=252621&r2=252622&view=diff ============================================================================== --- lldb/trunk/source/Symbol/TypeSystem.cpp (original) +++ lldb/trunk/source/Symbol/TypeSystem.cpp Tue Nov 10 11:47:04 2015 @@ -121,6 +121,36 @@ TypeSystem::IsMeaninglessWithoutDynamicR return false; } +ConstString +TypeSystem::DeclGetMangledName (void *opaque_decl) +{ + return ConstString(); +} + +CompilerDeclContext +TypeSystem::DeclGetDeclContext (void *opaque_decl) +{ + return CompilerDeclContext(); +} + +CompilerType +TypeSystem::DeclGetFunctionReturnType(void *opaque_decl) +{ + return CompilerType(); +} + +size_t +TypeSystem::DeclGetFunctionNumArguments(void *opaque_decl) +{ + return 0; +} + +CompilerType +TypeSystem::DeclGetFunctionArgumentType (void *opaque_decl, size_t arg_idx) +{ + return CompilerType(); +} + #pragma mark TypeSystemMap TypeSystemMap::TypeSystemMap() : _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits