[Lldb-commits] [lldb] r146089 - /lldb/trunk/source/Expression/ClangASTSource.cpp

Sean Callanan scallanan at apple.com
Wed Dec 7 14:39:40 PST 2011


Author: spyffe
Date: Wed Dec  7 16:39:39 2011
New Revision: 146089

URL: http://llvm.org/viewvc/llvm-project?rev=146089&view=rev
Log:
Fixed a few details of method lookup in Objective-C
symbols.  Now we find the correct method.

Unfortunately we don't get the superclass from the
runtime yet so the method doesn't import correctly
(and I added a check to make sure that doesn't hurt
us) but once we get that information right we will
report methods correctly to the parser as well.

Getting superclass information requires a common AST
context for all Objective-C runtime information,
meaning that the superclass and the subclass are in
the same AST context in all cases.  That is the next
thing that needs to be done here.

Modified:
    lldb/trunk/source/Expression/ClangASTSource.cpp

Modified: lldb/trunk/source/Expression/ClangASTSource.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/ClangASTSource.cpp?rev=146089&r1=146088&r2=146089&view=diff
==============================================================================
--- lldb/trunk/source/Expression/ClangASTSource.cpp (original)
+++ lldb/trunk/source/Expression/ClangASTSource.cpp Wed Dec  7 16:39:39 2011
@@ -581,6 +581,7 @@
             clang::ASTContext &backing_ast_context = backing_interface_decl->getASTContext();
             
             llvm::SmallVector<clang::IdentifierInfo *, 3> selector_components;
+            int num_arguments = 0;
 
             if (decl_name.isObjCZeroArgSelector())
             {
@@ -589,6 +590,7 @@
             else if (decl_name.isObjCOneArgSelector())
             {
                 selector_components.push_back (&backing_ast_context.Idents.get(decl_name.getAsString().c_str()));
+                num_arguments = 1;
             }
             else
             {    
@@ -601,10 +603,11 @@
                     llvm::StringRef r = sel.getNameForSlot(i);
 
                     selector_components.push_back (&backing_ast_context.Idents.get(r.str().c_str()));
+                    num_arguments++;
                 }
             }     
             
-            Selector backing_selector = backing_interface_decl->getASTContext().Selectors.getSelector(selector_components.size(), selector_components.data());
+            Selector backing_selector = backing_interface_decl->getASTContext().Selectors.getSelector(num_arguments, selector_components.data());
             DeclarationName backing_decl_name = DeclarationName(backing_selector);
             
             DeclContext::lookup_const_result lookup_result = backing_interface_decl->lookup(backing_decl_name);
@@ -619,6 +622,12 @@
             
             Decl *copied_decl = m_ast_importer->CopyDecl(m_ast_context, &backing_ast_context, *lookup_result.first);
             
+            if (!copied_decl)
+            {
+                log->Printf("  CAS::FOMD[%d] couldn't import method from symbols", current_id);
+                continue;
+            }
+            
             ObjCMethodDecl *copied_method_decl = dyn_cast<ObjCMethodDecl> (copied_decl);
             
             if (!copied_method_decl)





More information about the lldb-commits mailing list