aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CGObjC.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2009-03-10 18:03:11 +0000
committerFariborz Jahanian <fjahanian@apple.com>2009-03-10 18:03:11 +0000
commit3523d4f59eb0aa1f200dcb943093ecfe75008735 (patch)
treed87fe28137732cfc503a472f3eec963e07faff85 /lib/CodeGen/CGObjC.cpp
parent4a77edb3f0fabc8e214a3d5636c4d0aff031645c (diff)
ir-gen support for class getter/setter call
using property dot-syntax. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66556 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGObjC.cpp')
-rw-r--r--lib/CodeGen/CGObjC.cpp22
1 files changed, 18 insertions, 4 deletions
diff --git a/lib/CodeGen/CGObjC.cpp b/lib/CodeGen/CGObjC.cpp
index 5798865077..aa1f4c2494 100644
--- a/lib/CodeGen/CGObjC.cpp
+++ b/lib/CodeGen/CGObjC.cpp
@@ -327,10 +327,17 @@ RValue CodeGenFunction::EmitObjCPropertyGet(const Expr *Exp) {
else {
const ObjCKVCRefExpr *KE = cast<ObjCKVCRefExpr>(Exp);
Selector S = KE->getGetterMethod()->getSelector();
+ llvm::Value *Receiver;
+ if (KE->getClassProp()) {
+ const ObjCInterfaceDecl *OID = KE->getClassProp();
+ Receiver = CGM.getObjCRuntime().GetClass(Builder, OID);
+ }
+ else
+ Receiver = EmitScalarExpr(KE->getBase());
return CGM.getObjCRuntime().
GenerateMessageSend(*this, Exp->getType(), S,
- EmitScalarExpr(KE->getBase()),
- false, CallArgList());
+ Receiver,
+ KE->getClassProp() != 0, CallArgList());
}
}
@@ -348,10 +355,17 @@ void CodeGenFunction::EmitObjCPropertySet(const Expr *Exp,
else if (const ObjCKVCRefExpr *E = dyn_cast<ObjCKVCRefExpr>(Exp)) {
Selector S = E->getSetterMethod()->getSelector();
CallArgList Args;
+ llvm::Value *Receiver;
+ if (E->getClassProp()) {
+ const ObjCInterfaceDecl *OID = E->getClassProp();
+ Receiver = CGM.getObjCRuntime().GetClass(Builder, OID);
+ }
+ else
+ Receiver = EmitScalarExpr(E->getBase());
Args.push_back(std::make_pair(Src, E->getType()));
CGM.getObjCRuntime().GenerateMessageSend(*this, getContext().VoidTy, S,
- EmitScalarExpr(E->getBase()),
- false, Args);
+ Receiver,
+ E->getClassProp() != 0, Args);
}
else
assert (0 && "bad expression node in EmitObjCPropertySet");