diff options
Diffstat (limited to 'lldb/source/Symbol/ClangExternalASTSourceCallbacks.cpp')
-rw-r--r-- | lldb/source/Symbol/ClangExternalASTSourceCallbacks.cpp | 238 |
1 files changed, 126 insertions, 112 deletions
diff --git a/lldb/source/Symbol/ClangExternalASTSourceCallbacks.cpp b/lldb/source/Symbol/ClangExternalASTSourceCallbacks.cpp index 6c804f4d969..e39baea8ead 100644 --- a/lldb/source/Symbol/ClangExternalASTSourceCallbacks.cpp +++ b/lldb/source/Symbol/ClangExternalASTSourceCallbacks.cpp @@ -13,7 +13,7 @@ // C++ Includes // Other libraries and framework includes -// Clang headers like to use NDEBUG inside of them to enable/disable debug +// Clang headers like to use NDEBUG inside of them to enable/disable debug // related features using "#ifndef NDEBUG" preprocessor blocks to do one thing // or another. This is bad because it means that if clang was built in release // mode, it assumes that you are building in release mode which is not always @@ -46,131 +46,145 @@ using namespace clang; using namespace lldb_private; -bool -ClangExternalASTSourceCallbacks::FindExternalVisibleDeclsByName -( +bool ClangExternalASTSourceCallbacks::FindExternalVisibleDeclsByName( const clang::DeclContext *decl_ctx, - clang::DeclarationName clang_decl_name -) -{ - if (m_callback_find_by_name) - { - llvm::SmallVector <clang::NamedDecl *, 3> results; - - m_callback_find_by_name (m_callback_baton, decl_ctx, clang_decl_name, &results); - - SetExternalVisibleDeclsForName(decl_ctx, clang_decl_name, results); - - return (results.size() != 0); - } - - std::string decl_name (clang_decl_name.getAsString()); - - switch (clang_decl_name.getNameKind()) { - // Normal identifiers. - case clang::DeclarationName::Identifier: - //printf ("ClangExternalASTSourceCallbacks::FindExternalVisibleDeclsByName(decl_ctx = %p, decl_name = { kind = \"Identifier\", name = \"%s\")\n", decl_ctx, decl_name.c_str()); - if (clang_decl_name.getAsIdentifierInfo()->getBuiltinID() != 0) - { - SetNoExternalVisibleDeclsForName(decl_ctx, clang_decl_name); - return false; - } - break; - - case clang::DeclarationName::ObjCZeroArgSelector: - //printf ("ClangExternalASTSourceCallbacks::FindExternalVisibleDeclsByName(decl_ctx = %p, decl_name = { kind = \"ObjCZeroArgSelector\", name = \"%s\")\n", decl_ctx, decl_name.c_str()); - SetNoExternalVisibleDeclsForName(decl_ctx, clang_decl_name); - return false; - - case clang::DeclarationName::ObjCOneArgSelector: - //printf ("ClangExternalASTSourceCallbacks::FindExternalVisibleDeclsByName(decl_ctx = %p, decl_name = { kind = \"ObjCOneArgSelector\", name = \"%s\")\n", decl_ctx, decl_name.c_str()); - SetNoExternalVisibleDeclsForName(decl_ctx, clang_decl_name); - return false; - - case clang::DeclarationName::ObjCMultiArgSelector: - //printf ("ClangExternalASTSourceCallbacks::FindExternalVisibleDeclsByName(decl_ctx = %p, decl_name = { kind = \"ObjCMultiArgSelector\", name = \"%s\")\n", decl_ctx, decl_name.c_str()); - SetNoExternalVisibleDeclsForName(decl_ctx, clang_decl_name); - return false; - - case clang::DeclarationName::CXXConstructorName: - //printf ("ClangExternalASTSourceCallbacks::FindExternalVisibleDeclsByName(decl_ctx = %p, decl_name = { kind = \"CXXConstructorName\", name = \"%s\")\n", decl_ctx, decl_name.c_str()); - SetNoExternalVisibleDeclsForName(decl_ctx, clang_decl_name); - return false; - - - case clang::DeclarationName::CXXDestructorName: - //printf ("ClangExternalASTSourceCallbacks::FindExternalVisibleDeclsByName(decl_ctx = %p, decl_name = { kind = \"CXXDestructorName\", name = \"%s\")\n", decl_ctx, decl_name.c_str()); - SetNoExternalVisibleDeclsForName(decl_ctx, clang_decl_name); - return false; - - case clang::DeclarationName::CXXConversionFunctionName: - //printf ("ClangExternalASTSourceCallbacks::FindExternalVisibleDeclsByName(decl_ctx = %p, decl_name = { kind = \"CXXConversionFunctionName\", name = \"%s\")\n", decl_ctx, decl_name.c_str()); - SetNoExternalVisibleDeclsForName(decl_ctx, clang_decl_name); - return false; - - case clang::DeclarationName::CXXOperatorName: - //printf ("ClangExternalASTSourceCallbacks::FindExternalVisibleDeclsByName(decl_ctx = %p, decl_name = { kind = \"CXXOperatorName\", name = \"%s\")\n", decl_ctx, decl_name.c_str()); - SetNoExternalVisibleDeclsForName(decl_ctx, clang_decl_name); - return false; - - case clang::DeclarationName::CXXLiteralOperatorName: - //printf ("ClangExternalASTSourceCallbacks::FindExternalVisibleDeclsByName(decl_ctx = %p, decl_name = { kind = \"CXXLiteralOperatorName\", name = \"%s\")\n", decl_ctx, decl_name.c_str()); - SetNoExternalVisibleDeclsForName(decl_ctx, clang_decl_name); - return false; - - case clang::DeclarationName::CXXUsingDirective: - //printf ("ClangExternalASTSourceCallbacks::FindExternalVisibleDeclsByName(decl_ctx = %p, decl_name = { kind = \"CXXUsingDirective\", name = \"%s\")\n", decl_ctx, decl_name.c_str()); - SetNoExternalVisibleDeclsForName(decl_ctx, clang_decl_name); - return false; + clang::DeclarationName clang_decl_name) { + if (m_callback_find_by_name) { + llvm::SmallVector<clang::NamedDecl *, 3> results; + + m_callback_find_by_name(m_callback_baton, decl_ctx, clang_decl_name, + &results); + + SetExternalVisibleDeclsForName(decl_ctx, clang_decl_name, results); + + return (results.size() != 0); + } + + std::string decl_name(clang_decl_name.getAsString()); + + switch (clang_decl_name.getNameKind()) { + // Normal identifiers. + case clang::DeclarationName::Identifier: + // printf + // ("ClangExternalASTSourceCallbacks::FindExternalVisibleDeclsByName(decl_ctx + // = %p, decl_name = { kind = \"Identifier\", name = \"%s\")\n", decl_ctx, + // decl_name.c_str()); + if (clang_decl_name.getAsIdentifierInfo()->getBuiltinID() != 0) { + SetNoExternalVisibleDeclsForName(decl_ctx, clang_decl_name); + return false; } + break; + + case clang::DeclarationName::ObjCZeroArgSelector: + // printf + // ("ClangExternalASTSourceCallbacks::FindExternalVisibleDeclsByName(decl_ctx + // = %p, decl_name = { kind = \"ObjCZeroArgSelector\", name = \"%s\")\n", + // decl_ctx, decl_name.c_str()); + SetNoExternalVisibleDeclsForName(decl_ctx, clang_decl_name); + return false; + + case clang::DeclarationName::ObjCOneArgSelector: + // printf + // ("ClangExternalASTSourceCallbacks::FindExternalVisibleDeclsByName(decl_ctx + // = %p, decl_name = { kind = \"ObjCOneArgSelector\", name = \"%s\")\n", + // decl_ctx, decl_name.c_str()); + SetNoExternalVisibleDeclsForName(decl_ctx, clang_decl_name); + return false; + + case clang::DeclarationName::ObjCMultiArgSelector: + // printf + // ("ClangExternalASTSourceCallbacks::FindExternalVisibleDeclsByName(decl_ctx + // = %p, decl_name = { kind = \"ObjCMultiArgSelector\", name = \"%s\")\n", + // decl_ctx, decl_name.c_str()); + SetNoExternalVisibleDeclsForName(decl_ctx, clang_decl_name); + return false; + + case clang::DeclarationName::CXXConstructorName: + // printf + // ("ClangExternalASTSourceCallbacks::FindExternalVisibleDeclsByName(decl_ctx + // = %p, decl_name = { kind = \"CXXConstructorName\", name = \"%s\")\n", + // decl_ctx, decl_name.c_str()); + SetNoExternalVisibleDeclsForName(decl_ctx, clang_decl_name); + return false; + + case clang::DeclarationName::CXXDestructorName: + // printf + // ("ClangExternalASTSourceCallbacks::FindExternalVisibleDeclsByName(decl_ctx + // = %p, decl_name = { kind = \"CXXDestructorName\", name = \"%s\")\n", + // decl_ctx, decl_name.c_str()); + SetNoExternalVisibleDeclsForName(decl_ctx, clang_decl_name); + return false; + + case clang::DeclarationName::CXXConversionFunctionName: + // printf + // ("ClangExternalASTSourceCallbacks::FindExternalVisibleDeclsByName(decl_ctx + // = %p, decl_name = { kind = \"CXXConversionFunctionName\", name = + // \"%s\")\n", decl_ctx, decl_name.c_str()); + SetNoExternalVisibleDeclsForName(decl_ctx, clang_decl_name); + return false; + case clang::DeclarationName::CXXOperatorName: + // printf + // ("ClangExternalASTSourceCallbacks::FindExternalVisibleDeclsByName(decl_ctx + // = %p, decl_name = { kind = \"CXXOperatorName\", name = \"%s\")\n", + // decl_ctx, decl_name.c_str()); SetNoExternalVisibleDeclsForName(decl_ctx, clang_decl_name); return false; + + case clang::DeclarationName::CXXLiteralOperatorName: + // printf + // ("ClangExternalASTSourceCallbacks::FindExternalVisibleDeclsByName(decl_ctx + // = %p, decl_name = { kind = \"CXXLiteralOperatorName\", name = \"%s\")\n", + // decl_ctx, decl_name.c_str()); + SetNoExternalVisibleDeclsForName(decl_ctx, clang_decl_name); + return false; + + case clang::DeclarationName::CXXUsingDirective: + // printf + // ("ClangExternalASTSourceCallbacks::FindExternalVisibleDeclsByName(decl_ctx + // = %p, decl_name = { kind = \"CXXUsingDirective\", name = \"%s\")\n", + // decl_ctx, decl_name.c_str()); + SetNoExternalVisibleDeclsForName(decl_ctx, clang_decl_name); + return false; + } + + SetNoExternalVisibleDeclsForName(decl_ctx, clang_decl_name); + return false; } -void -ClangExternalASTSourceCallbacks::CompleteType (TagDecl *tag_decl) -{ - if (m_callback_tag_decl) - m_callback_tag_decl (m_callback_baton, tag_decl); +void ClangExternalASTSourceCallbacks::CompleteType(TagDecl *tag_decl) { + if (m_callback_tag_decl) + m_callback_tag_decl(m_callback_baton, tag_decl); } -void -ClangExternalASTSourceCallbacks::CompleteType (ObjCInterfaceDecl *objc_decl) -{ - if (m_callback_objc_decl) - m_callback_objc_decl (m_callback_baton, objc_decl); +void ClangExternalASTSourceCallbacks::CompleteType( + ObjCInterfaceDecl *objc_decl) { + if (m_callback_objc_decl) + m_callback_objc_decl(m_callback_baton, objc_decl); } -bool -ClangExternalASTSourceCallbacks::layoutRecordType( +bool ClangExternalASTSourceCallbacks::layoutRecordType( const clang::RecordDecl *Record, uint64_t &Size, uint64_t &Alignment, llvm::DenseMap<const clang::FieldDecl *, uint64_t> &FieldOffsets, llvm::DenseMap<const clang::CXXRecordDecl *, clang::CharUnits> &BaseOffsets, - llvm::DenseMap<const clang::CXXRecordDecl *, clang::CharUnits> &VirtualBaseOffsets) -{ - if (m_callback_layout_record_type) - return m_callback_layout_record_type(m_callback_baton, - Record, - Size, - Alignment, - FieldOffsets, - BaseOffsets, - VirtualBaseOffsets); - - return false; + llvm::DenseMap<const clang::CXXRecordDecl *, clang::CharUnits> + &VirtualBaseOffsets) { + if (m_callback_layout_record_type) + return m_callback_layout_record_type(m_callback_baton, Record, Size, + Alignment, FieldOffsets, BaseOffsets, + VirtualBaseOffsets); + + return false; } -void -ClangExternalASTSourceCallbacks::FindExternalLexicalDecls (const clang::DeclContext *decl_ctx, - llvm::function_ref<bool(clang::Decl::Kind)> IsKindWeWant, - llvm::SmallVectorImpl<clang::Decl *> &decls) -{ - if (m_callback_tag_decl && decl_ctx) - { - clang::TagDecl *tag_decl = llvm::dyn_cast<clang::TagDecl>(const_cast<clang::DeclContext *>(decl_ctx)); - if (tag_decl) - CompleteType(tag_decl); - } +void ClangExternalASTSourceCallbacks::FindExternalLexicalDecls( + const clang::DeclContext *decl_ctx, + llvm::function_ref<bool(clang::Decl::Kind)> IsKindWeWant, + llvm::SmallVectorImpl<clang::Decl *> &decls) { + if (m_callback_tag_decl && decl_ctx) { + clang::TagDecl *tag_decl = llvm::dyn_cast<clang::TagDecl>( + const_cast<clang::DeclContext *>(decl_ctx)); + if (tag_decl) + CompleteType(tag_decl); + } } - |