[cfe-commits] r79365 - in /cfe/trunk: include/clang/AST/ include/clang/Frontend/ lib/AST/ lib/Analysis/ lib/CodeGen/ lib/Frontend/ lib/Sema/

Fariborz Jahanian fjahanian at apple.com
Tue Aug 18 13:50:24 PDT 2009


Author: fjahanian
Date: Tue Aug 18 15:50:23 2009
New Revision: 79365

URL: http://llvm.org/viewvc/llvm-project?rev=79365&view=rev
Log:
Renamed ObjCKVCRefExpr to ObjCImplctSetterGetterRefExpr.
Removed an unnecessary loop to get to setters incoming
argument. Added DoxyGen comments. Still more work
to do in this area (WIP).

Modified:
    cfe/trunk/include/clang/AST/ExprObjC.h
    cfe/trunk/include/clang/AST/StmtNodes.def
    cfe/trunk/include/clang/Frontend/PCHBitCodes.h
    cfe/trunk/lib/AST/Expr.cpp
    cfe/trunk/lib/AST/StmtDumper.cpp
    cfe/trunk/lib/AST/StmtPrinter.cpp
    cfe/trunk/lib/AST/StmtProfile.cpp
    cfe/trunk/lib/Analysis/GRExprEngine.cpp
    cfe/trunk/lib/CodeGen/CGExpr.cpp
    cfe/trunk/lib/CodeGen/CGExprAgg.cpp
    cfe/trunk/lib/CodeGen/CGExprComplex.cpp
    cfe/trunk/lib/CodeGen/CGExprScalar.cpp
    cfe/trunk/lib/CodeGen/CGObjC.cpp
    cfe/trunk/lib/CodeGen/CGValue.h
    cfe/trunk/lib/CodeGen/CodeGenFunction.h
    cfe/trunk/lib/Frontend/PCHReaderStmt.cpp
    cfe/trunk/lib/Frontend/PCHWriterStmt.cpp
    cfe/trunk/lib/Frontend/StmtXML.cpp
    cfe/trunk/lib/Sema/SemaExpr.cpp
    cfe/trunk/lib/Sema/SemaExprObjC.cpp
    cfe/trunk/lib/Sema/SemaStmt.cpp
    cfe/trunk/lib/Sema/TreeTransform.h

Modified: cfe/trunk/include/clang/AST/ExprObjC.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/ExprObjC.h?rev=79365&r1=79364&r2=79365&view=diff

==============================================================================
--- cfe/trunk/include/clang/AST/ExprObjC.h (original)
+++ cfe/trunk/include/clang/AST/ExprObjC.h Tue Aug 18 15:50:23 2009
@@ -257,13 +257,24 @@
   virtual child_iterator child_end();
 };
 
-/// ObjCKVCRefExpr - A dot-syntax expression to access "implicit" properties 
-/// (i.e. methods following the property naming convention). KVC stands for
-/// Key Value Encoding, a generic concept for accessing or setting a 'Key'
-/// value for an object.
-///
-class ObjCKVCRefExpr : public Expr {
+/// ObjCImplctSetterGetterRefExpr - A dot-syntax expression to access two 
+/// methods; one to set a value to an 'ivar' (Setter) and the other to access 
+/// an 'ivar' (Setter). 
+/// An example for use of this AST is:
+/// @code
+///  @interface Test { }
+///  - (Test *)crash;
+///  - (void)setCrash: (Test*)value;
+/// @end
+/// void  foo(Test *p1, Test *p2) 
+/// {
+///    p2.crash  = p1.crash; // Uses ObjCImplctSetterGetterRefExpr AST
+/// }
+/// @endcode
+class ObjCImplctSetterGetterRefExpr : public Expr {
+  /// Setter - Setter method user declared for setting its 'ivar' to a value
   ObjCMethodDecl *Setter;
+  /// Getter - Getter method user declared for accessing 'ivar' it controls.
   ObjCMethodDecl *Getter;
   SourceLocation Loc;
   // FIXME: Swizzle these into a single pointer.
@@ -272,22 +283,23 @@
   SourceLocation ClassLoc;
     
 public:
-  ObjCKVCRefExpr(ObjCMethodDecl *getter,
+  ObjCImplctSetterGetterRefExpr(ObjCMethodDecl *getter,
                  QualType t, 
                  ObjCMethodDecl *setter,
                  SourceLocation l, Expr *base)
-    : Expr(ObjCKVCRefExprClass, t), Setter(setter),
+    : Expr(ObjCImplctSetterGetterRefExprClass, t), Setter(setter),
       Getter(getter), Loc(l), Base(base), ClassProp(0),
       ClassLoc(SourceLocation()) {
     }
-  ObjCKVCRefExpr(ObjCMethodDecl *getter,
+  ObjCImplctSetterGetterRefExpr(ObjCMethodDecl *getter,
                  QualType t, 
                  ObjCMethodDecl *setter,
                  SourceLocation l, ObjCInterfaceDecl *C, SourceLocation CL)
-    : Expr(ObjCKVCRefExprClass, t), Setter(setter),
+    : Expr(ObjCImplctSetterGetterRefExprClass, t), Setter(setter),
       Getter(getter), Loc(l), Base(0), ClassProp(C), ClassLoc(CL) {
     }
-  explicit ObjCKVCRefExpr(EmptyShell Empty) : Expr(ObjCKVCRefExprClass, Empty){}
+  explicit ObjCImplctSetterGetterRefExpr(EmptyShell Empty) 
+           : Expr(ObjCImplctSetterGetterRefExprClass, Empty){}
 
   ObjCMethodDecl *getGetterMethod() const { return Getter; }
   ObjCMethodDecl *getSetterMethod() const { return Setter; }
@@ -311,9 +323,9 @@
   void setClassLoc(SourceLocation L) { ClassLoc = L; }
     
   static bool classof(const Stmt *T) { 
-    return T->getStmtClass() == ObjCKVCRefExprClass; 
+    return T->getStmtClass() == ObjCImplctSetterGetterRefExprClass; 
   }
-  static bool classof(const ObjCKVCRefExpr *) { return true; }
+  static bool classof(const ObjCImplctSetterGetterRefExpr *) { return true; }
     
   // Iterators
   virtual child_iterator child_begin();

Modified: cfe/trunk/include/clang/AST/StmtNodes.def
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/StmtNodes.def?rev=79365&r1=79364&r2=79365&view=diff

==============================================================================
--- cfe/trunk/include/clang/AST/StmtNodes.def (original)
+++ cfe/trunk/include/clang/AST/StmtNodes.def Tue Aug 18 15:50:23 2009
@@ -144,7 +144,7 @@
 EXPR(ObjCProtocolExpr     , Expr)
 EXPR(ObjCIvarRefExpr      , Expr)
 EXPR(ObjCPropertyRefExpr  , Expr)
-EXPR(ObjCKVCRefExpr       , Expr)
+EXPR(ObjCImplctSetterGetterRefExpr , Expr)
 EXPR(ObjCSuperExpr        , Expr)
 EXPR(ObjCIsaExpr          , Expr)
 

Modified: cfe/trunk/include/clang/Frontend/PCHBitCodes.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/PCHBitCodes.h?rev=79365&r1=79364&r2=79365&view=diff

==============================================================================
--- cfe/trunk/include/clang/Frontend/PCHBitCodes.h (original)
+++ cfe/trunk/include/clang/Frontend/PCHBitCodes.h Tue Aug 18 15:50:23 2009
@@ -636,7 +636,7 @@
       EXPR_OBJC_IVAR_REF_EXPR,
       /// \brief An ObjCPropertyRefExpr record.
       EXPR_OBJC_PROPERTY_REF_EXPR,
-      /// \brief An ObjCKVCRefExpr record.
+      /// \brief An ObjCImplctSetterGetterRefExpr record.
       EXPR_OBJC_KVC_REF_EXPR,
       /// \brief An ObjCMessageExpr record.
       EXPR_OBJC_MESSAGE_EXPR,

Modified: cfe/trunk/lib/AST/Expr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Expr.cpp?rev=79365&r1=79364&r2=79365&view=diff

==============================================================================
--- cfe/trunk/lib/AST/Expr.cpp (original)
+++ cfe/trunk/lib/AST/Expr.cpp Tue Aug 18 15:50:23 2009
@@ -542,14 +542,15 @@
   case ObjCMessageExprClass:
     return false;
       
-  case ObjCKVCRefExprClass: {   // Dot syntax for message send.
+  case ObjCImplctSetterGetterRefExprClass: {   // Dot syntax for message send.
 #if 0
-    const ObjCKVCRefExpr *KVCRef = cast<ObjCKVCRefExpr>(this);
+    const ObjCImplctSetterGetterRefExpr *Ref = 
+      cast<ObjCImplctSetterGetterRefExpr>(this);
     // FIXME: We really want the location of the '.' here.
-    Loc = KVCRef->getLocation();
-    R1 = SourceRange(KVCRef->getLocation(), KVCRef->getLocation());
-    if (KVCRef->getBase())
-      R2 = KVCRef->getBase()->getSourceRange();
+    Loc = Ref->getLocation();
+    R1 = SourceRange(Ref->getLocation(), Ref->getLocation());
+    if (Ref->getBase())
+      R2 = Ref->getBase()->getSourceRange();
 #else
     Loc = getExprLoc();
     R1 = getSourceRange();
@@ -793,7 +794,7 @@
     return LV_Valid;
   case ObjCPropertyRefExprClass: // FIXME: check if read-only property.
     return LV_Valid;
-  case ObjCKVCRefExprClass: // FIXME: check if read-only property.
+  case ObjCImplctSetterGetterRefExprClass: // FIXME: check if read-only property.
     return LV_Valid;
   case PredefinedExprClass:
     return LV_Valid;
@@ -914,9 +915,10 @@
   }
   
   // Assigning to an 'implicit' property?
-  else if (isa<ObjCKVCRefExpr>(this)) {
-    const ObjCKVCRefExpr* KVCExpr = cast<ObjCKVCRefExpr>(this);
-    if (KVCExpr->getSetterMethod() == 0)
+  else if (isa<ObjCImplctSetterGetterRefExpr>(this)) {
+    const ObjCImplctSetterGetterRefExpr* Expr = 
+      cast<ObjCImplctSetterGetterRefExpr>(this);
+    if (Expr->getSetterMethod() == 0)
       return MLV_NoSetterProperty;
   }
   return MLV_Valid;    
@@ -1861,9 +1863,13 @@
 Stmt::child_iterator ObjCPropertyRefExpr::child_begin() { return &Base; }
 Stmt::child_iterator ObjCPropertyRefExpr::child_end() { return &Base+1; }
 
-// ObjCKVCRefExpr
-Stmt::child_iterator ObjCKVCRefExpr::child_begin() { return &Base; }
-Stmt::child_iterator ObjCKVCRefExpr::child_end() { return &Base+1; }
+// ObjCImplctSetterGetterRefExpr
+Stmt::child_iterator ObjCImplctSetterGetterRefExpr::child_begin() { 
+  return &Base; 
+}
+Stmt::child_iterator ObjCImplctSetterGetterRefExpr::child_end() { 
+  return &Base+1; 
+}
 
 // ObjCSuperExpr
 Stmt::child_iterator ObjCSuperExpr::child_begin() { return child_iterator(); }

Modified: cfe/trunk/lib/AST/StmtDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtDumper.cpp?rev=79365&r1=79364&r2=79365&view=diff

==============================================================================
--- cfe/trunk/lib/AST/StmtDumper.cpp (original)
+++ cfe/trunk/lib/AST/StmtDumper.cpp Tue Aug 18 15:50:23 2009
@@ -148,7 +148,8 @@
     void VisitObjCSelectorExpr(ObjCSelectorExpr *Node);
     void VisitObjCProtocolExpr(ObjCProtocolExpr *Node);
     void VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *Node);
-    void VisitObjCKVCRefExpr(ObjCKVCRefExpr *Node);
+    void VisitObjCImplctSetterGetterRefExpr(
+                                          ObjCImplctSetterGetterRefExpr *Node);
     void VisitObjCIvarRefExpr(ObjCIvarRefExpr *Node);
     void VisitObjCSuperExpr(ObjCSuperExpr *Node);
   };
@@ -521,7 +522,8 @@
           Node->getProperty()->getNameAsString().c_str());
 }
 
-void StmtDumper::VisitObjCKVCRefExpr(ObjCKVCRefExpr *Node) {
+void StmtDumper::VisitObjCImplctSetterGetterRefExpr(
+                                        ObjCImplctSetterGetterRefExpr *Node) {
   DumpExpr(Node);
   
   ObjCMethodDecl *Getter = Node->getGetterMethod();

Modified: cfe/trunk/lib/AST/StmtPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtPrinter.cpp?rev=79365&r1=79364&r2=79365&view=diff

==============================================================================
--- cfe/trunk/lib/AST/StmtPrinter.cpp (original)
+++ cfe/trunk/lib/AST/StmtPrinter.cpp Tue Aug 18 15:50:23 2009
@@ -518,12 +518,15 @@
   OS << Node->getProperty()->getNameAsCString();
 }
 
-void StmtPrinter::VisitObjCKVCRefExpr(ObjCKVCRefExpr *Node) {
+void StmtPrinter::VisitObjCImplctSetterGetterRefExpr(
+                                        ObjCImplctSetterGetterRefExpr *Node) {
   if (Node->getBase()) {
     PrintExpr(Node->getBase());
     OS << ".";
   }
-  // FIXME: Setter/Getter names
+  if (Node->getGetterMethod())
+    OS << Node->getGetterMethod()->getNameAsString();
+    
 }
 
 void StmtPrinter::VisitPredefinedExpr(PredefinedExpr *Node) {

Modified: cfe/trunk/lib/AST/StmtProfile.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtProfile.cpp?rev=79365&r1=79364&r2=79365&view=diff

==============================================================================
--- cfe/trunk/lib/AST/StmtProfile.cpp (original)
+++ cfe/trunk/lib/AST/StmtProfile.cpp Tue Aug 18 15:50:23 2009
@@ -583,7 +583,8 @@
   VisitDecl(S->getProperty());
 }
 
-void StmtProfiler::VisitObjCKVCRefExpr(ObjCKVCRefExpr *S) {
+void StmtProfiler::VisitObjCImplctSetterGetterRefExpr(
+                                  ObjCImplctSetterGetterRefExpr *S) {
   VisitExpr(S);
   VisitDecl(S->getGetterMethod());
   VisitDecl(S->getSetterMethod());

Modified: cfe/trunk/lib/Analysis/GRExprEngine.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/GRExprEngine.cpp?rev=79365&r1=79364&r2=79365&view=diff

==============================================================================
--- cfe/trunk/lib/Analysis/GRExprEngine.cpp (original)
+++ cfe/trunk/lib/Analysis/GRExprEngine.cpp Tue Aug 18 15:50:23 2009
@@ -528,7 +528,7 @@
       return;
       
     case Stmt::ObjCPropertyRefExprClass:
-    case Stmt::ObjCKVCRefExprClass:
+    case Stmt::ObjCImplctSetterGetterRefExprClass:
       // FIXME: Property assignments are lvalues, but not really "locations".
       //  e.g.:  self.x = something;
       //  Here the "self.x" really can translate to a method call (setter) when
@@ -2787,8 +2787,8 @@
   Expr* LHS = B->getLHS()->IgnoreParens();
   Expr* RHS = B->getRHS()->IgnoreParens();
   
-  // FIXME: Add proper support for ObjCKVCRefExpr.
-  if (isa<ObjCKVCRefExpr>(LHS)) {
+  // FIXME: Add proper support for ObjCImplctSetterGetterRefExpr.
+  if (isa<ObjCImplctSetterGetterRefExpr>(LHS)) {
     Visit(RHS, Pred, Dst);   
     return;
   }

Modified: cfe/trunk/lib/CodeGen/CGExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExpr.cpp?rev=79365&r1=79364&r2=79365&view=diff

==============================================================================
--- cfe/trunk/lib/CodeGen/CGExpr.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExpr.cpp Tue Aug 18 15:50:23 2009
@@ -227,8 +227,8 @@
     return EmitObjCIvarRefLValue(cast<ObjCIvarRefExpr>(E));
   case Expr::ObjCPropertyRefExprClass:
     return EmitObjCPropertyRefLValue(cast<ObjCPropertyRefExpr>(E));
-  case Expr::ObjCKVCRefExprClass:
-    return EmitObjCKVCRefLValue(cast<ObjCKVCRefExpr>(E));
+  case Expr::ObjCImplctSetterGetterRefExprClass:
+    return EmitObjCKVCRefLValue(cast<ObjCImplctSetterGetterRefExpr>(E));
   case Expr::ObjCSuperExprClass:
     return EmitObjCSuperExprLValue(cast<ObjCSuperExpr>(E));
 
@@ -1026,7 +1026,7 @@
       isUnion = true;
     CVRQualifiers = PTy->getPointeeType().getCVRQualifiers();
   } else if (isa<ObjCPropertyRefExpr>(BaseExpr) ||
-             isa<ObjCKVCRefExpr>(BaseExpr)) {
+             isa<ObjCImplctSetterGetterRefExpr>(BaseExpr)) {
     RValue RV = EmitObjCPropertyGet(BaseExpr);
     BaseValue = RV.getAggregateAddr();
     if (BaseExpr->getType()->isUnionType())
@@ -1341,7 +1341,8 @@
 }
 
 LValue 
-CodeGenFunction::EmitObjCKVCRefLValue(const ObjCKVCRefExpr *E) {
+CodeGenFunction::EmitObjCKVCRefLValue(
+                                const ObjCImplctSetterGetterRefExpr *E) {
   // This is a special l-value that just issues sends when we load or
   // store through it.
   return LValue::MakeKVCRef(E, E->getType().getCVRQualifiers());

Modified: cfe/trunk/lib/CodeGen/CGExprAgg.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprAgg.cpp?rev=79365&r1=79364&r2=79365&view=diff

==============================================================================
--- cfe/trunk/lib/CodeGen/CGExprAgg.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExprAgg.cpp Tue Aug 18 15:50:23 2009
@@ -99,7 +99,7 @@
     EmitAggLoadOfLValue(E);
   }
   void VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E);
-  void VisitObjCKVCRefExpr(ObjCKVCRefExpr *E);
+  void VisitObjCImplctSetterGetterRefExpr(ObjCImplctSetterGetterRefExpr *E);
   
   void VisitConditionalOperator(const ConditionalOperator *CO);
   void VisitChooseExpr(const ChooseExpr *CE);
@@ -208,7 +208,8 @@
   EmitFinalDestCopy(E, RV);
 }
 
-void AggExprEmitter::VisitObjCKVCRefExpr(ObjCKVCRefExpr *E) {
+void AggExprEmitter::VisitObjCImplctSetterGetterRefExpr(
+                                   ObjCImplctSetterGetterRefExpr *E) {
   RValue RV = CGF.EmitObjCPropertyGet(E);
   EmitFinalDestCopy(E, RV);
 }

Modified: cfe/trunk/lib/CodeGen/CGExprComplex.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprComplex.cpp?rev=79365&r1=79364&r2=79365&view=diff

==============================================================================
--- cfe/trunk/lib/CodeGen/CGExprComplex.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExprComplex.cpp Tue Aug 18 15:50:23 2009
@@ -120,7 +120,8 @@
   ComplexPairTy VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E) {
     return EmitLoadOfLValue(E);
   }
-  ComplexPairTy VisitObjCKVCRefExpr(ObjCKVCRefExpr *E) {
+  ComplexPairTy VisitObjCImplctSetterGetterRefExpr(
+                               ObjCImplctSetterGetterRefExpr *E) {
     return EmitLoadOfLValue(E);
   }
   ComplexPairTy VisitObjCMessageExpr(ObjCMessageExpr *E) {

Modified: cfe/trunk/lib/CodeGen/CGExprScalar.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprScalar.cpp?rev=79365&r1=79364&r2=79365&view=diff

==============================================================================
--- cfe/trunk/lib/CodeGen/CGExprScalar.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExprScalar.cpp Tue Aug 18 15:50:23 2009
@@ -158,7 +158,8 @@
   Value *VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E) {
     return EmitLoadOfLValue(E);
   }
-  Value *VisitObjCKVCRefExpr(ObjCKVCRefExpr *E) {
+  Value *VisitObjCImplctSetterGetterRefExpr(
+                        ObjCImplctSetterGetterRefExpr *E) {
     return EmitLoadOfLValue(E);
   }
   Value *VisitObjCMessageExpr(ObjCMessageExpr *E) {

Modified: cfe/trunk/lib/CodeGen/CGObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjC.cpp?rev=79365&r1=79364&r2=79365&view=diff

==============================================================================
--- cfe/trunk/lib/CodeGen/CGObjC.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGObjC.cpp Tue Aug 18 15:50:23 2009
@@ -337,7 +337,8 @@
                                  EmitScalarExpr(E->getBase()), 
                                  false, CallArgList());
   } else {
-    const ObjCKVCRefExpr *KE = cast<ObjCKVCRefExpr>(Exp);
+    const ObjCImplctSetterGetterRefExpr *KE = 
+      cast<ObjCImplctSetterGetterRefExpr>(Exp);
     Selector S = KE->getGetterMethod()->getSelector();
     llvm::Value *Receiver;
     if (KE->getClassProp()) {
@@ -388,7 +389,8 @@
     CGM.getObjCRuntime().GenerateMessageSend(*this, getContext().VoidTy, S, 
                                              EmitScalarExpr(E->getBase()), 
                                              false, Args);
-  } else if (const ObjCKVCRefExpr *E = dyn_cast<ObjCKVCRefExpr>(Exp)) {
+  } else if (const ObjCImplctSetterGetterRefExpr *E = 
+               dyn_cast<ObjCImplctSetterGetterRefExpr>(Exp)) {
     Selector S = E->getSetterMethod()->getSelector();
     CallArgList Args;
     llvm::Value *Receiver;

Modified: cfe/trunk/lib/CodeGen/CGValue.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGValue.h?rev=79365&r1=79364&r2=79365&view=diff

==============================================================================
--- cfe/trunk/lib/CodeGen/CGValue.h (original)
+++ cfe/trunk/lib/CodeGen/CGValue.h Tue Aug 18 15:50:23 2009
@@ -24,7 +24,7 @@
 
 namespace clang {
   class ObjCPropertyRefExpr;
-  class ObjCKVCRefExpr;
+  class ObjCImplctSetterGetterRefExpr;
 
 namespace CodeGen {
 
@@ -143,7 +143,7 @@
     // Obj-C property reference expression
     const ObjCPropertyRefExpr *PropertyRefExpr;
     // ObjC 'implicit' property reference expression
-    const ObjCKVCRefExpr *KVCRefExpr;
+    const ObjCImplctSetterGetterRefExpr *KVCRefExpr;
   };
 
   bool Volatile:1;
@@ -251,7 +251,7 @@
   }
 
   // 'implicit' property ref lvalue
-  const ObjCKVCRefExpr *getKVCRefExpr() const {
+  const ObjCImplctSetterGetterRefExpr *getKVCRefExpr() const {
     assert(isKVCRef());
     return KVCRefExpr;
   }
@@ -313,7 +313,8 @@
     return R;
   }
   
-  static LValue MakeKVCRef(const ObjCKVCRefExpr *E, unsigned Qualifiers) {
+  static LValue MakeKVCRef(const ObjCImplctSetterGetterRefExpr *E, 
+                           unsigned Qualifiers) {
     LValue R;
     R.LVType = KVCRef;
     R.KVCRefExpr = E;

Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.h?rev=79365&r1=79364&r2=79365&view=diff

==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenFunction.h (original)
+++ cfe/trunk/lib/CodeGen/CodeGenFunction.h Tue Aug 18 15:50:23 2009
@@ -805,7 +805,7 @@
   LValue EmitObjCMessageExprLValue(const ObjCMessageExpr *E);
   LValue EmitObjCIvarRefLValue(const ObjCIvarRefExpr *E);
   LValue EmitObjCPropertyRefLValue(const ObjCPropertyRefExpr *E);
-  LValue EmitObjCKVCRefLValue(const ObjCKVCRefExpr *E);
+  LValue EmitObjCKVCRefLValue(const ObjCImplctSetterGetterRefExpr *E);
   LValue EmitObjCSuperExprLValue(const ObjCSuperExpr *E);
   LValue EmitStmtExprLValue(const StmtExpr *E);
 

Modified: cfe/trunk/lib/Frontend/PCHReaderStmt.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/PCHReaderStmt.cpp?rev=79365&r1=79364&r2=79365&view=diff

==============================================================================
--- cfe/trunk/lib/Frontend/PCHReaderStmt.cpp (original)
+++ cfe/trunk/lib/Frontend/PCHReaderStmt.cpp Tue Aug 18 15:50:23 2009
@@ -101,7 +101,8 @@
     unsigned VisitObjCProtocolExpr(ObjCProtocolExpr *E);
     unsigned VisitObjCIvarRefExpr(ObjCIvarRefExpr *E);
     unsigned VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E);
-    unsigned VisitObjCKVCRefExpr(ObjCKVCRefExpr *E);
+    unsigned VisitObjCImplctSetterGetterRefExpr(
+                            ObjCImplctSetterGetterRefExpr *E);
     unsigned VisitObjCMessageExpr(ObjCMessageExpr *E);
     unsigned VisitObjCSuperExpr(ObjCSuperExpr *E);
     unsigned VisitObjCIsaExpr(ObjCIsaExpr *E);
@@ -741,7 +742,8 @@
   return 1;
 }
 
-unsigned PCHStmtReader::VisitObjCKVCRefExpr(ObjCKVCRefExpr *E) {
+unsigned PCHStmtReader::VisitObjCImplctSetterGetterRefExpr(
+                                      ObjCImplctSetterGetterRefExpr *E) {
   VisitExpr(E);
   E->setGetterMethod(
                  cast_or_null<ObjCMethodDecl>(Reader.GetDecl(Record[Idx++])));
@@ -1114,7 +1116,7 @@
       S = new (Context) ObjCPropertyRefExpr(Empty);
       break;
     case pch::EXPR_OBJC_KVC_REF_EXPR:
-      S = new (Context) ObjCKVCRefExpr(Empty);
+      S = new (Context) ObjCImplctSetterGetterRefExpr(Empty);
       break;
     case pch::EXPR_OBJC_MESSAGE_EXPR:
       S = new (Context) ObjCMessageExpr(Empty);

Modified: cfe/trunk/lib/Frontend/PCHWriterStmt.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/PCHWriterStmt.cpp?rev=79365&r1=79364&r2=79365&view=diff

==============================================================================
--- cfe/trunk/lib/Frontend/PCHWriterStmt.cpp (original)
+++ cfe/trunk/lib/Frontend/PCHWriterStmt.cpp Tue Aug 18 15:50:23 2009
@@ -94,7 +94,8 @@
     void VisitObjCProtocolExpr(ObjCProtocolExpr *E);
     void VisitObjCIvarRefExpr(ObjCIvarRefExpr *E);
     void VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E);
-    void VisitObjCKVCRefExpr(ObjCKVCRefExpr *E);
+    void VisitObjCImplctSetterGetterRefExpr(
+                        ObjCImplctSetterGetterRefExpr *E);
     void VisitObjCMessageExpr(ObjCMessageExpr *E);
     void VisitObjCSuperExpr(ObjCSuperExpr *E);
     void VisitObjCIsaExpr(ObjCIsaExpr *E);
@@ -672,7 +673,8 @@
   Code = pch::EXPR_OBJC_PROPERTY_REF_EXPR;
 }
 
-void PCHStmtWriter::VisitObjCKVCRefExpr(ObjCKVCRefExpr *E) {
+void PCHStmtWriter::VisitObjCImplctSetterGetterRefExpr(
+                                  ObjCImplctSetterGetterRefExpr *E) {
   VisitExpr(E);
   Writer.AddDeclRef(E->getGetterMethod(), Record);
   Writer.AddDeclRef(E->getSetterMethod(), Record);

Modified: cfe/trunk/lib/Frontend/StmtXML.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/StmtXML.cpp?rev=79365&r1=79364&r2=79365&view=diff

==============================================================================
--- cfe/trunk/lib/Frontend/StmtXML.cpp (original)
+++ cfe/trunk/lib/Frontend/StmtXML.cpp Tue Aug 18 15:50:23 2009
@@ -163,7 +163,8 @@
     void VisitObjCSelectorExpr(ObjCSelectorExpr *Node);
     void VisitObjCProtocolExpr(ObjCProtocolExpr *Node);
     void VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *Node);
-    void VisitObjCKVCRefExpr(ObjCKVCRefExpr *Node);
+    void VisitObjCImplctSetterGetterRefExpr(
+                        ObjCImplctSetterGetterRefExpr *Node);
     void VisitObjCIvarRefExpr(ObjCIvarRefExpr *Node);
     void VisitObjCSuperExpr(ObjCSuperExpr *Node);
 #endif
@@ -438,7 +439,8 @@
   Doc.addAttribute("property", Node->getProperty()->getNameAsString());
 }
 
-void StmtXML::VisitObjCKVCRefExpr(ObjCKVCRefExpr *Node) {
+void StmtXML::VisitObjCImplctSetterGetterRefExpr(
+                             ObjCImplctSetterGetterRefExpr *Node) {
   DumpExpr(Node);
   ObjCMethodDecl *Getter = Node->getGetterMethod();
   ObjCMethodDecl *Setter = Node->getSetterMethod();

Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=79365&r1=79364&r2=79365&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExpr.cpp Tue Aug 18 15:50:23 2009
@@ -2342,13 +2342,11 @@
 
         if (Getter)
           PType = Getter->getResultType();
-        else {
-          for (ObjCMethodDecl::param_iterator PI = Setter->param_begin(),
-               E = Setter->param_end(); PI != E; ++PI)
-            PType = (*PI)->getType();
-        }
+        else
+          // Get the expression type from Setter's incoming parameter.
+          PType = (*(Setter->param_end() -1))->getType();
         // FIXME: we must check that the setter has property type.
-        return Owned(new (Context) ObjCKVCRefExpr(Getter, PType,
+        return Owned(new (Context) ObjCImplctSetterGetterRefExpr(Getter, PType,
                                         Setter, MemberLoc, BaseExpr));
       }
       return ExprError(Diag(MemberLoc, diag::err_property_not_found)
@@ -2535,13 +2533,11 @@
 
       if (Getter)
         PType = Getter->getResultType();
-      else {
-        for (ObjCMethodDecl::param_iterator PI = Setter->param_begin(),
-             E = Setter->param_end(); PI != E; ++PI)
-          PType = (*PI)->getType();
-      }
+      else
+        // Get the expression type from Setter's incoming parameter.
+        PType = (*(Setter->param_end() -1))->getType();
       // FIXME: we must check that the setter has property type.
-      return Owned(new (Context) ObjCKVCRefExpr(Getter, PType,
+      return Owned(new (Context) ObjCImplctSetterGetterRefExpr(Getter, PType,
                                       Setter, MemberLoc, BaseExpr));
     }
     return ExprError(Diag(MemberLoc, diag::err_property_not_found)

Modified: cfe/trunk/lib/Sema/SemaExprObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprObjC.cpp?rev=79365&r1=79364&r2=79365&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaExprObjC.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExprObjC.cpp Tue Aug 18 15:50:23 2009
@@ -338,7 +338,8 @@
            E = Setter->param_end(); PI != E; ++PI)
         PType = (*PI)->getType();
     }
-    return Owned(new (Context) ObjCKVCRefExpr(Getter, PType, Setter, 
+    return Owned(new (Context) ObjCImplctSetterGetterRefExpr(
+                                  Getter, PType, Setter, 
                                   propertyNameLoc, IFace, receiverNameLoc));
   }
   return ExprError(Diag(propertyNameLoc, diag::err_property_not_found)

Modified: cfe/trunk/lib/Sema/SemaStmt.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=79365&r1=79364&r2=79365&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaStmt.cpp (original)
+++ cfe/trunk/lib/Sema/SemaStmt.cpp Tue Aug 18 15:50:23 2009
@@ -70,7 +70,7 @@
   // cases now.
   unsigned DiagID = diag::warn_unused_expr;
   E = E->IgnoreParens();
-  if (isa<ObjCKVCRefExpr>(E))
+  if (isa<ObjCImplctSetterGetterRefExpr>(E))
     DiagID = diag::warn_unused_property_expr;
   
   Diag(Loc, DiagID) << R1 << R2;

Modified: cfe/trunk/lib/Sema/TreeTransform.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/TreeTransform.h?rev=79365&r1=79364&r2=79365&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/TreeTransform.h (original)
+++ cfe/trunk/lib/Sema/TreeTransform.h Tue Aug 18 15:50:23 2009
@@ -3409,7 +3409,8 @@
 
 template<typename Derived> 
 Sema::OwningExprResult 
-TreeTransform<Derived>::TransformObjCKVCRefExpr(ObjCKVCRefExpr *E) { 
+TreeTransform<Derived>::TransformObjCImplctSetterGetterRefExpr(
+                                          ObjCImplctSetterGetterRefExpr *E) { 
   // FIXME: Implement this!
   assert(false && "Cannot transform Objective-C expressions yet");
   return SemaRef.Owned(E->Retain()); 





More information about the cfe-commits mailing list