summaryrefslogtreecommitdiffstats
path: root/clang/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
commitf3eb96fccf373f429ff1fefb51ae5eacad95cf81 (patch)
tree6527dc0d7b2306058a2323ce9b43d07e2a8ed9eb /clang/lib/CodeGen/CGObjC.cpp
parent7788e5fd642718993f3f70fff9d3f2030474f3cd (diff)
downloadbcm5719-llvm-f3eb96fccf373f429ff1fefb51ae5eacad95cf81.tar.gz
bcm5719-llvm-f3eb96fccf373f429ff1fefb51ae5eacad95cf81.zip
Kill the KVC l-value kind and calculate the base expression when emitting
the l-value. llvm-svn: 120884
Diffstat (limited to 'clang/lib/CodeGen/CGObjC.cpp')
-rw-r--r--clang/lib/CodeGen/CGObjC.cpp32
1 files changed, 12 insertions, 20 deletions
diff --git a/clang/lib/CodeGen/CGObjC.cpp b/clang/lib/CodeGen/CGObjC.cpp
index 095f0cdde58..4b2b8612e70 100644
--- a/clang/lib/CodeGen/CGObjC.cpp
+++ b/clang/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));
OpenPOWER on IntegriCloud