aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CGObjC.cpp
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2010-12-04 02:32:38 +0000
committerJohn McCall <rjmccall@apple.com>2010-12-04 02:32:38 +0000
commit119a1c6c4029d30cae7b31a2826aa0ff70d01668 (patch)
treeeaec3cc289e887d12238c3f9b47d706f7312db0a /lib/CodeGen/CGObjC.cpp
parent91252d115bdb6f937192a8dbc86c5abe00101436 (diff)
Kill the KVC l-value kind and calculate the base expression when emitting
the l-value. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@120884 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGObjC.cpp')
-rw-r--r--lib/CodeGen/CGObjC.cpp32
1 files changed, 12 insertions, 20 deletions
diff --git a/lib/CodeGen/CGObjC.cpp b/lib/CodeGen/CGObjC.cpp
index 095f0cdde5..4b2b8612e7 100644
--- a/lib/CodeGen/CGObjC.cpp
+++ b/lib/CodeGen/CGObjC.cpp
@@ -528,8 +528,9 @@ RValue CodeGenFunction::EmitObjCSuperPropertyGet(const Expr *Exp,
}
-RValue CodeGenFunction::EmitObjCPropertyGet(const ObjCPropertyRefExpr *E,
- ReturnValueSlot Return) {
+RValue CodeGenFunction::EmitLoadOfPropertyRefLValue(LValue LV,
+ ReturnValueSlot Return) {
+ const ObjCPropertyRefExpr *E = LV.getPropertyRefExpr();
QualType ResultType;
Selector S;
if (E->isExplicitProperty()) {
@@ -545,14 +546,9 @@ RValue CodeGenFunction::EmitObjCPropertyGet(const ObjCPropertyRefExpr *E,
if (E->isSuperReceiver())
return EmitObjCSuperPropertyGet(E, S, Return);
- llvm::Value *Receiver;
- const ObjCInterfaceDecl *ReceiverClass = 0;
- if (E->isClassReceiver()) {
- ReceiverClass = E->getClassReceiver();
- Receiver = CGM.getObjCRuntime().GetClass(Builder, ReceiverClass);
- } else {
- Receiver = EmitScalarExpr(E->getBase());
- }
+ llvm::Value *Receiver = LV.getPropertyRefBaseAddr();
+ const ObjCInterfaceDecl *ReceiverClass
+ = (E->isClassReceiver() ? E->getClassReceiver() : 0);
return CGM.getObjCRuntime().
GenerateMessageSend(*this, Return, ResultType, S,
Receiver, CallArgList(), ReceiverClass);
@@ -579,8 +575,9 @@ void CodeGenFunction::EmitObjCSuperPropertySet(const Expr *Exp,
return;
}
-void CodeGenFunction::EmitObjCPropertySet(const ObjCPropertyRefExpr *E,
- RValue Src) {
+void CodeGenFunction::EmitStoreThroughPropertyRefLValue(RValue Src,
+ LValue Dst) {
+ const ObjCPropertyRefExpr *E = Dst.getPropertyRefExpr();
Selector S = E->getSetterSelector();
QualType ArgType;
if (E->isImplicitProperty()) {
@@ -596,14 +593,9 @@ void CodeGenFunction::EmitObjCPropertySet(const ObjCPropertyRefExpr *E,
return;
}
- const ObjCInterfaceDecl *ReceiverClass = 0;
- llvm::Value *Receiver;
- if (E->isClassReceiver()) {
- ReceiverClass = E->getClassReceiver();
- Receiver = CGM.getObjCRuntime().GetClass(Builder, ReceiverClass);
- } else {
- Receiver = EmitScalarExpr(E->getBase());
- }
+ llvm::Value *Receiver = Dst.getPropertyRefBaseAddr();
+ const ObjCInterfaceDecl *ReceiverClass
+ = (E->isClassReceiver() ? E->getClassReceiver() : 0);
CallArgList Args;
Args.push_back(std::make_pair(Src, ArgType));