summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2008-12-10 00:21:50 +0000
committerFariborz Jahanian <fjahanian@apple.com>2008-12-10 00:21:50 +0000
commit7572ac5614e189e4498ffe2b98791544cd0d66ec (patch)
tree5198ad409eb7aae28d2df1e94bff29057df29852
parent288fbd2133d3243e4c29496d0f738540a0b0305e (diff)
downloadbcm5719-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.cpp9
-rw-r--r--clang/test/CodeGenObjC/property-getter-dot-syntax.m11
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;
+}
OpenPOWER on IntegriCloud