diff options
author | Daniel Dunbar <daniel@zuster.org> | 2008-08-27 06:57:25 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2008-08-27 06:57:25 +0000 |
commit | 9c3fc703b29a31d40bcf5027dbb4784dd393804e (patch) | |
tree | acbfc451d53b7828a3f09c4bb5ddcab489fad7b8 /lib/CodeGen/CGExprScalar.cpp | |
parent | 8a7267ef413d84a907d178cee9eb32294cf6b13b (diff) |
Initial support for Obj-C dot-syntax for getters.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55410 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGExprScalar.cpp')
-rw-r--r-- | lib/CodeGen/CGExprScalar.cpp | 32 |
1 files changed, 13 insertions, 19 deletions
diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp index 11d1e8dfdb..cee8852cdc 100644 --- a/lib/CodeGen/CGExprScalar.cpp +++ b/lib/CodeGen/CGExprScalar.cpp @@ -134,14 +134,20 @@ public: return llvm::ConstantInt::get(EC->getInitVal()); return EmitLoadOfLValue(E); } - Value *VisitObjCSelectorExpr(ObjCSelectorExpr *E); - Value *VisitObjCProtocolExpr(ObjCProtocolExpr *E); - Value *VisitObjCIvarRefExpr(ObjCIvarRefExpr *E) { return EmitLoadOfLValue(E);} + Value *VisitObjCSelectorExpr(ObjCSelectorExpr *E) { + return CGF.EmitObjCSelectorExpr(E); + } + Value *VisitObjCProtocolExpr(ObjCProtocolExpr *E) { + return CGF.EmitObjCProtocolExpr(E); + } + Value *VisitObjCIvarRefExpr(ObjCIvarRefExpr *E) { + return EmitLoadOfLValue(E); + } Value *VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E) { - CGF.ErrorUnsupported(E, "scalar expression (Objective-C property reference)"); - if (E->getType()->isVoidType()) - return 0; - return llvm::UndefValue::get(CGF.ConvertType(E->getType())); + return CGF.EmitObjCPropertyGet(E).getScalarVal(); + } + Value *VisitObjCMessageExpr(ObjCMessageExpr *E) { + return CGF.EmitObjCMessageExpr(E).getScalarVal(); } Value *VisitArraySubscriptExpr(ArraySubscriptExpr *E); @@ -196,10 +202,6 @@ public: return CGF.EmitCallExpr(E).getScalarVal(); } - Value *VisitObjCMessageExpr(ObjCMessageExpr *E) { - return CGF.EmitObjCMessageExpr(E).getScalarVal(); - } - Value *VisitStmtExpr(const StmtExpr *E); // Unary Operators. @@ -481,14 +483,6 @@ Value *ScalarExprEmitter::VisitShuffleVectorExpr(ShuffleVectorExpr *E) { return Builder.CreateShuffleVector(V1, V2, SV, "shuffle"); } -Value *ScalarExprEmitter::VisitObjCSelectorExpr(ObjCSelectorExpr *E) { - return CGF.EmitObjCSelectorExpr(E); -} - -Value *ScalarExprEmitter::VisitObjCProtocolExpr(ObjCProtocolExpr *E) { - return CGF.EmitObjCProtocolExpr(E); -} - Value *ScalarExprEmitter::VisitArraySubscriptExpr(ArraySubscriptExpr *E) { // Emit subscript expressions in rvalue context's. For most cases, this just // loads the lvalue formed by the subscript expr. However, we have to be |