]> granicus.if.org Git - clang/commitdiff
switch ObjCMethodDecl's parameter list from being explicitly managed to an ObjCList.
authorChris Lattner <sabre@nondot.org>
Fri, 20 Feb 2009 06:23:21 +0000 (06:23 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 20 Feb 2009 06:23:21 +0000 (06:23 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65114 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/DeclObjC.h
lib/AST/DeclObjC.cpp
lib/CodeGen/CGCall.cpp

index 06cd3e0bea792f0b07b13d11dff941617620a656..dd6856f32cd49ac0aac03d31d55a7ab099627299 100644 (file)
@@ -123,10 +123,9 @@ private:
   
   // Type of this method.
   QualType MethodDeclType;
-  /// ParamInfo - new[]'d array of pointers to VarDecls for the formal
-  /// parameters of this Method.  This is null if there are no formals.  
-  ParmVarDecl **ParamInfo;
-  unsigned NumMethodParams;
+  /// ParamInfo - List of pointers to VarDecls for the formal parameters of this
+  /// Method.
+  ObjCList<ParmVarDecl> ParamInfo;
   
   /// List of attributes for this method declaration.
   SourceLocation EndLoc; // the location of the ';' or '{'.
@@ -155,12 +154,9 @@ private:
     IsSynthesized(isSynthesized),
     DeclImplementation(impControl), objcDeclQualifier(OBJC_TQ_None),
     MethodDeclType(T), 
-    ParamInfo(0), NumMethodParams(0), 
     EndLoc(endLoc), Body(0), SelfDecl(0), CmdDecl(0) {}
 
-  virtual ~ObjCMethodDecl() {
-    assert(ParamInfo == 0 && "Destroy not called?");
-  }
+  virtual ~ObjCMethodDecl() {}
   
 public:
   
@@ -198,23 +194,18 @@ public:
   QualType getResultType() const { return MethodDeclType; }
   
   // Iterator access to formal parameters.
-  unsigned param_size() const { return NumMethodParams; }
-  typedef ParmVarDecl **param_iterator;
-  typedef ParmVarDecl * const *param_const_iterator;
-  param_iterator param_begin() { return ParamInfo; }
-  param_iterator param_end() { return ParamInfo+param_size(); }
-  param_const_iterator param_begin() const { return ParamInfo; }
-  param_const_iterator param_end() const { return ParamInfo+param_size(); }
-  
-  unsigned getNumParams() const { return NumMethodParams; }
+  unsigned param_size() const { return ParamInfo.size(); }
+  typedef ObjCList<ParmVarDecl>::iterator param_iterator;
+  param_iterator param_begin() const { return ParamInfo.begin(); }
+  param_iterator param_end() const { return ParamInfo.end(); }
+  
+  unsigned getNumParams() const { return ParamInfo.size(); }
   ParmVarDecl *getParamDecl(unsigned i) const {
-    assert(i < getNumParams() && "Illegal param #");
     return ParamInfo[i];
   }  
-  void setParamDecl(int i, ParmVarDecl *pDecl) {
-    ParamInfo[i] = pDecl;
-  }  
-  void setMethodParams(ParmVarDecl **NewParamInfo, unsigned NumParams);
+  void setMethodParams(ParmVarDecl *const *NewParamInfo, unsigned NumParams) {
+    ParamInfo.set(NewParamInfo, NumParams);
+  }
 
   /// createImplicitParams - Used to lazily create the self and cmd
   /// implict parameters. This must be called prior to using getSelfDecl()
index 629dcca67828de7af0f0837f3d6f22c8117068da..1651df91413ee121b21677721d2d9aa7817d0c97 100644 (file)
@@ -42,8 +42,7 @@ void ObjCMethodDecl::Destroy(ASTContext& C) {
   for (param_iterator I=param_begin(), E=param_end(); I!=E; ++I)
     if (*I) (*I)->Destroy(C);
 
-  delete [] ParamInfo;
-  ParamInfo = 0;
+  ParamInfo.clear();
 
   Decl::Destroy(C);
 }
@@ -241,18 +240,6 @@ void ObjCMethodDecl::createImplicitParams(ASTContext &Context,
                                       Context.getObjCSelType());
 }
 
-void ObjCMethodDecl::setMethodParams(ParmVarDecl **NewParamInfo,
-                                     unsigned NumParams) {
-  assert(ParamInfo == 0 && "Already has param info!");
-
-  // Zero params -> null pointer.
-  if (NumParams) {
-    ParamInfo = new ParmVarDecl*[NumParams];
-    memcpy(ParamInfo, NewParamInfo, sizeof(ParmVarDecl*)*NumParams);
-    NumMethodParams = NumParams;
-  }
-}
-
 /// FindCategoryDeclaration - Finds category declaration in the list of
 /// categories for this class and returns it. Name of the category is passed
 /// in 'CategoryId'. If category not found, return 0;
index 45b386f4261cd79f9170919e3d6461f32a6c482a..42f671a7e61602c0fd693a599bce8416862aeeea 100644 (file)
@@ -63,7 +63,7 @@ const CGFunctionInfo &CodeGenTypes::getFunctionInfo(const ObjCMethodDecl *MD) {
   ArgTys.push_back(MD->getSelfDecl()->getType());
   ArgTys.push_back(Context.getObjCSelType());
   // FIXME: Kill copy?
-  for (ObjCMethodDecl::param_const_iterator i = MD->param_begin(),
+  for (ObjCMethodDecl::param_iterator i = MD->param_begin(),
          e = MD->param_end(); i != e; ++i)
     ArgTys.push_back((*i)->getType());
   return getFunctionInfo(MD->getResultType(), ArgTys);