diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2009-03-10 18:03:11 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2009-03-10 18:03:11 +0000 |
commit | 3523d4f59eb0aa1f200dcb943093ecfe75008735 (patch) | |
tree | d87fe28137732cfc503a472f3eec963e07faff85 /lib/CodeGen/CGObjC.cpp | |
parent | 4a77edb3f0fabc8e214a3d5636c4d0aff031645c (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.cpp | 22 |
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"); |