From: Fariborz Jahanian Date: Wed, 10 Dec 2008 00:21:50 +0000 (+0000) Subject: Patch to allow a getter call using property dot-syntax notation. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=391d8953701ad712bb31ebe33d12ca1765758897;p=clang Patch to allow a getter call using property dot-syntax notation. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60816 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index cdca682704..a2dc7f7c89 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -1309,9 +1309,16 @@ ActOnMemberReferenceExpr(ExprTy *Base, SourceLocation OpLoc, if (OpKind == tok::period && (QIdTy = BaseType->getAsObjCQualifiedIdType())) { // Check protocols on qualified interfaces. for (ObjCQualifiedIdType::qual_iterator I = QIdTy->qual_begin(), - E = QIdTy->qual_end(); I != E; ++I) + E = QIdTy->qual_end(); I != E; ++I) { if (ObjCPropertyDecl *PD = (*I)->FindPropertyDeclaration(&Member)) return new ObjCPropertyRefExpr(PD, PD->getType(), MemberLoc, BaseExpr); + // Also must look for a getter name which uses property syntax. + Selector Sel = PP.getSelectorTable().getNullarySelector(&Member); + if (ObjCMethodDecl *OMD = (*I)->getInstanceMethod(Sel)) { + return new ObjCMessageExpr(BaseExpr, Sel, OMD->getResultType(), OMD, + OpLoc, MemberLoc, NULL, 0); + } + } } // Handle 'field access' to vectors, such as 'V.xx'. if (BaseType->isExtVectorType() && OpKind == tok::period) { diff --git a/test/CodeGenObjC/property-getter-dot-syntax.m b/test/CodeGenObjC/property-getter-dot-syntax.m new file mode 100644 index 0000000000..962862b536 --- /dev/null +++ b/test/CodeGenObjC/property-getter-dot-syntax.m @@ -0,0 +1,11 @@ +// RUN: clang -fnext-runtime --emit-llvm -o %t %s + +@protocol NSObject +- (void *)description; +@end + +int main() +{ + id eggs; + void *eggsText= eggs.description; +}