From: Steve Naroff Date: Wed, 4 Jun 2008 14:43:54 +0000 (+0000) Subject: Sema::ActOnClassMessage() needs to look through it's local implementation for private... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9ad23d6f454e64b2ff960721becc5b90dea4d353;p=clang Sema::ActOnClassMessage() needs to look through it's local implementation for private class methods. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51938 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaExprObjC.cpp b/lib/Sema/SemaExprObjC.cpp index 2f3949fe60..c9cfc92f4d 100644 --- a/lib/Sema/SemaExprObjC.cpp +++ b/lib/Sema/SemaExprObjC.cpp @@ -170,6 +170,12 @@ Sema::ExprResult Sema::ActOnClassMessage( ObjCMethodDecl *Method = ClassDecl->lookupClassMethod(Sel); QualType returnType; + // If we have an implementation in scope, check "private" methods. + if (!Method) { + if (ObjCImplementationDecl *ImpDecl = + ObjCImplementations[ClassDecl->getIdentifier()]) + Method = ImpDecl->getClassMethod(Sel); + } // Before we give up, check if the selector is an instance method. if (!Method) Method = ClassDecl->lookupInstanceMethod(Sel); diff --git a/test/Sema/method-lookup.m b/test/Sema/method-lookup.m new file mode 100644 index 0000000000..4dfbc74662 --- /dev/null +++ b/test/Sema/method-lookup.m @@ -0,0 +1,34 @@ +// RUN: clang -fsyntax-only -verify %s +typedef signed char BOOL; +typedef int NSInteger; + +@protocol NSObject +- (BOOL)isEqual:(id)object; +- (BOOL)respondsToSelector:(SEL)s; +@end + +@interface NSObject {} +@end + +@class NSString, NSData, NSMutableData, NSMutableDictionary, NSMutableArray; + +@protocol PBXCompletionItem +- (NSString *) name; +- (NSInteger)priority; +- setPriority:(NSInteger)p; +@end + +@implementation PBXCodeAssistant // expected-warning{{cannot find interface declaration for 'PBXCodeAssistant'}} +static NSMutableArray * recentCompletions = ((void *)0); ++ (float) factorForRecentCompletion:(NSString *) completion +{ + for (NSObject * item in [self completionItems]) // expected-warning{{method '-completionItems' not found (return type defaults to 'id')}} + { + if ([item respondsToSelector:@selector(setPriority:)]) + { + [(id)item setPriority:[item priority] / [PBXCodeAssistant factorForRecentCompletion:[item name]]]; + } + } +} +@end +