From 7572ac5614e189e4498ffe2b98791544cd0d66ec Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Wed, 10 Dec 2008 00:21:50 +0000 Subject: Patch to allow a getter call using property dot-syntax notation. llvm-svn: 60816 --- clang/lib/Sema/SemaExpr.cpp | 9 ++++++++- clang/test/CodeGenObjC/property-getter-dot-syntax.m | 11 +++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 clang/test/CodeGenObjC/property-getter-dot-syntax.m diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index cdca6827049..a2dc7f7c891 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/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/clang/test/CodeGenObjC/property-getter-dot-syntax.m b/clang/test/CodeGenObjC/property-getter-dot-syntax.m new file mode 100644 index 00000000000..962862b5366 --- /dev/null +++ b/clang/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; +} -- cgit v1.2.3