]> granicus.if.org Git - clang/commitdiff
Kill ASTContext::[gs]etFieldForDecl, instead we just lookup things
authorDaniel Dunbar <daniel@zuster.org>
Tue, 21 Apr 2009 01:19:28 +0000 (01:19 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Tue, 21 Apr 2009 01:19:28 +0000 (01:19 +0000)
when we need them -- which is exactly what some code was already
doing!
 - No intended functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69648 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/ASTContext.h
lib/AST/ASTContext.cpp
lib/CodeGen/CGExpr.cpp
lib/CodeGen/CGObjC.cpp
lib/CodeGen/CGObjCGNU.cpp
lib/CodeGen/CGObjCMac.cpp
lib/CodeGen/CGObjCRuntime.h
lib/CodeGen/CodeGenFunction.h
lib/Sema/SemaExpr.cpp

index 2b95ac57e635c5310e02d0cd66936cf742d501f5..11f629a6f954e149c8956afe5fef22870a21c0db 100644 (file)
@@ -102,7 +102,6 @@ class ASTContext {
   // FIXME: ASTRecordForInterface/ASTFieldForIvarRef and addRecordToClass and
   // getFieldDecl be part of the backend (i.e. CodeGenTypes)?
   llvm::DenseMap<const ObjCInterfaceDecl*, RecordDecl*> ASTRecordForInterface;
-  llvm::DenseMap<const ObjCIvarRefExpr*, const FieldDecl*> ASTFieldForIvarRef;
   
   /// BuiltinVaListType - built-in va list type.
   /// This is initially null and set by Sema::LazilyCreateBuiltin when
@@ -507,15 +506,7 @@ public:
   const RecordDecl *addRecordToClass(const ObjCInterfaceDecl *D);
   void CollectObjCIvars(const ObjCInterfaceDecl *OI,
                         llvm::SmallVectorImpl<FieldDecl*> &Fields);
-  const FieldDecl *getFieldDecl(const ObjCIvarRefExpr *MRef) {
-    llvm::DenseMap<const ObjCIvarRefExpr *, const FieldDecl*>::iterator I 
-      = ASTFieldForIvarRef.find(MRef);
-    assert (I != ASTFieldForIvarRef.end()  && "Unable to find field_decl");
-    return I->second;
-  }
-  void setFieldDecl(const ObjCInterfaceDecl *OI,
-                    const ObjCIvarDecl *Ivar,
-                    const ObjCIvarRefExpr *MRef);
+
   //===--------------------------------------------------------------------===//
   //                            Type Operators
   //===--------------------------------------------------------------------===//
index e266774ddefd62474d99cb1e7eef2f29387ce896..cfff4b54402cabae6aa074c21307bf627b1b41a9 100644 (file)
@@ -18,7 +18,6 @@
 #include "clang/AST/Expr.h"
 #include "clang/AST/ExternalASTSource.h"
 #include "clang/AST/RecordLayout.h"
-#include "clang/AST/ExprObjC.h"
 #include "clang/Basic/SourceManager.h"
 #include "clang/Basic/TargetInfo.h"
 #include "llvm/ADT/StringExtras.h"
@@ -680,15 +679,6 @@ const RecordDecl *ASTContext::addRecordToClass(const ObjCInterfaceDecl *D) {
   return RD;
 }
 
-/// setFieldDecl - maps a field for the given Ivar reference node.
-//
-void ASTContext::setFieldDecl(const ObjCInterfaceDecl *OI,
-                              const ObjCIvarDecl *Ivar,
-                              const ObjCIvarRefExpr *MRef) {
-  assert(MRef->getDecl() == Ivar);
-  ASTFieldForIvarRef[MRef] = OI->lookupFieldDeclForIvar(*this, Ivar);
-}
-
 /// getASTObjcInterfaceLayout - Get or compute information about the layout of
 /// the specified Objective C, which indicates its size and ivar
 /// position information.
index 01bbc8405022001dcfad4f897459e39b1cc1af88..906a1e2cd6cbfa79ee860186094f37fc6e99fd5f 100644 (file)
@@ -1137,10 +1137,9 @@ llvm::Value *CodeGenFunction::EmitIvarOffset(ObjCInterfaceDecl *Interface,
 LValue CodeGenFunction::EmitLValueForIvar(QualType ObjectTy,
                                           llvm::Value *BaseValue,
                                           const ObjCIvarDecl *Ivar,
-                                          const FieldDecl *Field,
                                           unsigned CVRQualifiers) {
   return CGM.getObjCRuntime().EmitObjCValueForIvar(*this, ObjectTy, BaseValue,
-                                                   Ivar, Field, CVRQualifiers);
+                                                   Ivar, CVRQualifiers);
 }
 
 LValue CodeGenFunction::EmitObjCIvarRefLValue(const ObjCIvarRefExpr *E) {
@@ -1162,8 +1161,7 @@ LValue CodeGenFunction::EmitObjCIvarRefLValue(const ObjCIvarRefExpr *E) {
     CVRQualifiers = ObjectTy.getCVRQualifiers();
   }
 
-  return EmitLValueForIvar(ObjectTy, BaseValue, E->getDecl(), 
-                           getContext().getFieldDecl(E), CVRQualifiers);
+  return EmitLValueForIvar(ObjectTy, BaseValue, E->getDecl(), CVRQualifiers);
 }
 
 LValue 
index e22efa162adf05394823937351341b5c312059dc..f57a4a0f29bd2763dc1ba38d77c904503b9b31e3 100644 (file)
@@ -195,10 +195,7 @@ void CodeGenFunction::GenerateObjCGetter(ObjCImplementationDecl *IMP,
                                            Types.ConvertType(PD->getType())));
     EmitReturnOfRValue(RV, PD->getType());
   } else {
-    const FieldDecl *Field = 
-      IMP->getClassInterface()->lookupFieldDeclForIvar(getContext(), Ivar);
-    LValue LV = EmitLValueForIvar(TypeOfSelfObject(),
-                                  LoadObjCSelf(), Ivar, Field, 0);
+    LValue LV = EmitLValueForIvar(TypeOfSelfObject(), LoadObjCSelf(), Ivar, 0);
     if (hasAggregateLLVMType(Ivar->getType())) {
       EmitAggregateCopy(ReturnValue, LV.getAddress(), Ivar->getType());
     }
@@ -290,7 +287,6 @@ void CodeGenFunction::GenerateObjCSetter(ObjCImplementationDecl *IMP,
     ObjCInterfaceDecl *OI = IMP->getClassInterface();
     ObjCIvarRefExpr IvarRef(Ivar, Ivar->getType(), Loc, &Base,
                             true, true);
-    getContext().setFieldDecl(OI, Ivar, &IvarRef);
     BinaryOperator Assign(&IvarRef, &Arg, BinaryOperator::Assign,
                           Ivar->getType(), Loc);
     EmitStmt(&Assign);
index 46e20c99ee37da49a89d3607a73a5a8ce68c235a..167e33738673e6f427fc1c8167485da4e7e8fed0 100644 (file)
@@ -146,7 +146,6 @@ public:
                                       QualType ObjectTy,
                                       llvm::Value *BaseValue,
                                       const ObjCIvarDecl *Ivar,
-                                      const FieldDecl *Field,
                                       unsigned CVRQualifiers);
   virtual llvm::Value *EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
                                       ObjCInterfaceDecl *Interface,
@@ -1081,9 +1080,9 @@ LValue CGObjCGNU::EmitObjCValueForIvar(CodeGen::CodeGenFunction &CGF,
                                        QualType ObjectTy,
                                        llvm::Value *BaseValue,
                                        const ObjCIvarDecl *Ivar,
-                                       const FieldDecl *Field,
                                        unsigned CVRQualifiers) {
-  assert(Field == ObjectTy->getAsObjCInterfaceType()->getDecl()->lookupFieldDeclForIvar(CGM.getContext(), Ivar));
+  const ObjCInterfaceDecl *ID = ObjectTy->getAsObjCInterfaceType()->getDecl();
+  const FieldDecl *Field = ID->lookupFieldDeclForIvar(CGM.getContext(), Ivar);
   if (Ivar->isBitField()) 
     return CGF.EmitLValueForBitfield(BaseValue, const_cast<FieldDecl *>(Field), 
                                  CVRQualifiers);
index 3b5e0c55047d67596f1b93e935be550ca28faa61..58cfe8e16332fc7947da69db7c76713c0a55631e 100644 (file)
@@ -701,7 +701,6 @@ private:
                                       QualType ObjectTy,
                                       llvm::Value *BaseValue,
                                       const ObjCIvarDecl *Ivar,
-                                      const FieldDecl *Field,
                                       unsigned CVRQualifiers);
   virtual llvm::Value *EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
                                       ObjCInterfaceDecl *Interface,
@@ -891,7 +890,6 @@ public:
                                       QualType ObjectTy,
                                       llvm::Value *BaseValue,
                                       const ObjCIvarDecl *Ivar,
-                                      const FieldDecl *Field,
                                       unsigned CVRQualifiers);
   virtual llvm::Value *EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
                                       ObjCInterfaceDecl *Interface,
@@ -2366,9 +2364,9 @@ LValue CGObjCMac::EmitObjCValueForIvar(CodeGen::CodeGenFunction &CGF,
                                        QualType ObjectTy,
                                        llvm::Value *BaseValue,
                                        const ObjCIvarDecl *Ivar,
-                                       const FieldDecl *Field,
                                        unsigned CVRQualifiers) {
-  assert(Field == ObjectTy->getAsObjCInterfaceType()->getDecl()->lookupFieldDeclForIvar(CGM.getContext(), Ivar));
+  const ObjCInterfaceDecl *ID = ObjectTy->getAsObjCInterfaceType()->getDecl();
+  const FieldDecl *Field = ID->lookupFieldDeclForIvar(CGM.getContext(), Ivar);
   if (Ivar->isBitField())
     return CGF.EmitLValueForBitfield(BaseValue, const_cast<FieldDecl *>(Field),
                                      CVRQualifiers);
@@ -4887,12 +4885,9 @@ LValue CGObjCNonFragileABIMac::EmitObjCValueForIvar(
                                              QualType ObjectTy,
                                              llvm::Value *BaseValue,
                                              const ObjCIvarDecl *Ivar,
-                                             const FieldDecl *Field,
                                              unsigned CVRQualifiers) {
-  assert(Field == ObjectTy->getAsObjCInterfaceType()->getDecl()->lookupFieldDeclForIvar(CGM.getContext(), Ivar));
-  assert(ObjectTy->isObjCInterfaceType() && 
-         "CGObjCNonFragileABIMac::EmitObjCValueForIvar");
-  ObjCInterfaceDecl *ID = ObjectTy->getAsObjCInterfaceType()->getDecl();
+  const ObjCInterfaceDecl *ID = ObjectTy->getAsObjCInterfaceType()->getDecl();
+  const FieldDecl *Field = ID->lookupFieldDeclForIvar(CGM.getContext(), Ivar);
   llvm::GlobalVariable *IvarOffsetGV = ObjCIvarOffsetVariable(ID, Ivar);
   
   // (char *) BaseValue
index 262467ae192693da5b1c8dacdca3980e9c64ecb9..4faa89410d3e26657152ed91d1df0147bbc8c9da 100644 (file)
@@ -157,7 +157,6 @@ public:
                                       QualType ObjectTy,
                                       llvm::Value *BaseValue,
                                       const ObjCIvarDecl *Ivar,
-                                      const FieldDecl *Field,
                                       unsigned CVRQualifiers) = 0;
   virtual llvm::Value *EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
                                       ObjCInterfaceDecl *Interface,
index 91e8695dba5a313f1a972859ea5b889136d7b754..a0f38af42b06a118115784c3c63c208420fdc839 100644 (file)
@@ -629,7 +629,6 @@ public:
                             bool isUnion, unsigned CVRQualifiers);
   LValue EmitLValueForIvar(QualType ObjectTy,
                            llvm::Value* Base, const ObjCIvarDecl *Ivar,
-                           const FieldDecl *Field,
                            unsigned CVRQualifiers);
 
   LValue EmitLValueForBitfield(llvm::Value* Base, FieldDecl* Field,
index 5abe106bce9d8b794891d65520fd523d6317fb13..788361b59a0b4b75149e62de843ef042f5d85579 100644 (file)
@@ -691,11 +691,10 @@ Sema::ActOnDeclarationNameExpr(Scope *S, SourceLocation Loc,
           // this into Self->ivar, just return a BareIVarExpr or something.
           IdentifierInfo &II = Context.Idents.get("self");
           OwningExprResult SelfExpr = ActOnIdentifierExpr(S, Loc, II, false);
-          ObjCIvarRefExpr *MRef = new (Context) ObjCIvarRefExpr(IV, IV->getType(),
-                                    Loc, static_cast<Expr*>(SelfExpr.release()),
-                                    true, true);
-          Context.setFieldDecl(IFace, IV, MRef);
-          return Owned(MRef);
+          return Owned(new (Context) 
+                       ObjCIvarRefExpr(IV, IV->getType(), Loc, 
+                                       static_cast<Expr*>(SelfExpr.release()),
+                                       true, true));
         }
       }
     }
@@ -1948,11 +1947,9 @@ Sema::ActOnMemberReferenceExpr(Scope *S, ExprArg Base, SourceLocation OpLoc,
           Diag(MemberLoc, diag::error_protected_ivar_access) << IV->getDeclName();
       }
 
-      ObjCIvarRefExpr *MRef= new (Context) ObjCIvarRefExpr(IV, IV->getType(),
+      return Owned(new (Context) ObjCIvarRefExpr(IV, IV->getType(),
                                                  MemberLoc, BaseExpr,
-                                                 OpKind == tok::arrow);
-      Context.setFieldDecl(IFTy->getDecl(), IV, MRef);
-      return Owned(MRef);
+                                                 OpKind == tok::arrow));
     }
     return ExprError(Diag(MemberLoc, diag::err_typecheck_member_reference_ivar)
                        << IFTy->getDecl()->getDeclName() << &Member