From 156506e749cd053506116146c74b6a7afeb5b01f Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Tue, 10 Mar 2009 18:03:11 +0000 Subject: ir-gen support for class getter/setter call using property dot-syntax. llvm-svn: 66556 --- clang/lib/CodeGen/CGObjC.cpp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'clang/lib/CodeGen/CGObjC.cpp') diff --git a/clang/lib/CodeGen/CGObjC.cpp b/clang/lib/CodeGen/CGObjC.cpp index 57988650774..aa1f4c24944 100644 --- a/clang/lib/CodeGen/CGObjC.cpp +++ b/clang/lib/CodeGen/CGObjC.cpp @@ -327,10 +327,17 @@ RValue CodeGenFunction::EmitObjCPropertyGet(const Expr *Exp) { else { const ObjCKVCRefExpr *KE = cast(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(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"); -- cgit v1.2.3