diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2008-12-10 00:21:50 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2008-12-10 00:21:50 +0000 |
commit | 7572ac5614e189e4498ffe2b98791544cd0d66ec (patch) | |
tree | 5198ad409eb7aae28d2df1e94bff29057df29852 | |
parent | 288fbd2133d3243e4c29496d0f738540a0b0305e (diff) | |
download | bcm5719-llvm-7572ac5614e189e4498ffe2b98791544cd0d66ec.tar.gz bcm5719-llvm-7572ac5614e189e4498ffe2b98791544cd0d66ec.zip |
Patch to allow a getter call using property dot-syntax notation.
llvm-svn: 60816
-rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 9 | ||||
-rw-r--r-- | clang/test/CodeGenObjC/property-getter-dot-syntax.m | 11 |
2 files changed, 19 insertions, 1 deletions
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<NSObject> eggs; + void *eggsText= eggs.description; +} |