]> granicus.if.org Git - clang/commitdiff
rename getNumParmVarDeclsFromType back to getNumParams(),
authorChris Lattner <sabre@nondot.org>
Sat, 25 Apr 2009 06:03:53 +0000 (06:03 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 25 Apr 2009 06:03:53 +0000 (06:03 +0000)
remove a special case that was apparently for typeof() and
generalize the code in SemaDecl that handles typedefs to
handle any sugar type (including typedef, typeof, etc).
Improve comment to make it more clear what is going on.

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

include/clang/AST/Decl.h
lib/AST/Decl.cpp
lib/Sema/SemaDecl.cpp

index 901da704ce9e41bf0baae1ec91b8c553cd3181a8..0e396c27b239e47c1318b2eaaaec012c95ea2e6f 100644 (file)
@@ -643,9 +643,6 @@ public:
 
   unsigned getBuiltinID(ASTContext &Context) const;
 
-  /// getNumParmVarDeclsFromType - Ignoring the actual argument list, this
-  /// returns the number of ParmVarDecls that the FunctionType of this function
-  /// expects.
   unsigned getNumParmVarDeclsFromType() const;
   
   // Iterator access to formal parameters.
@@ -659,7 +656,11 @@ public:
   param_const_iterator param_begin() const { return ParamInfo; }
   param_const_iterator param_end() const   { return ParamInfo+param_size(); }
   
+  /// getNumParams - Return the number of parameters this function must have
+  /// based on its functiontype.  This is the length of the PararmInfo array
+  /// after it has been created.
   unsigned getNumParams() const;
+  
   const ParmVarDecl *getParamDecl(unsigned i) const {
     assert(i < getNumParams() && "Illegal param #");
     return ParamInfo[i];
index a715531c74a5896909cbb31306e68973c706ff26..57a44e54d8b9b29eaf203da2a7db49c291ec97ea 100644 (file)
@@ -431,10 +431,10 @@ unsigned FunctionDecl::getBuiltinID(ASTContext &Context) const {
 }
 
 
-/// getNumParmVarDeclsFromType - Ignoring the actual argument list, this
-/// returns the number of ParmVarDecls that the FunctionType of this function
-/// expects.
-unsigned FunctionDecl::getNumParmVarDeclsFromType() const {
+/// getNumParams - Return the number of parameters this function must have
+/// based on its functiontype.  This is the length of the PararmInfo array
+/// after it has been created.
+unsigned FunctionDecl::getNumParams() const {
   const FunctionType *FT = getType()->getAsFunctionType();
   if (isa<FunctionNoProtoType>(FT))
     return 0;
@@ -442,18 +442,10 @@ unsigned FunctionDecl::getNumParmVarDeclsFromType() const {
   
 }
 
-unsigned FunctionDecl::getNumParams() const {
-  // Can happen if a FunctionDecl is declared using typeof(some_other_func) bar;
-  if (!ParamInfo)
-    return 0;
-  
-  return getNumParmVarDeclsFromType();
-}
-
 void FunctionDecl::setParams(ASTContext& C, ParmVarDecl **NewParamInfo,
                              unsigned NumParams) {
   assert(ParamInfo == 0 && "Already has param info!");
-  assert(NumParams == getNumParmVarDeclsFromType() &&
+  assert(NumParams == getNumParams() &&
          "Parameter count mismatch!");
   
   // Zero params -> null pointer.
index d34b20780e83df04bb6d1e333b700a2c5f2d2395..8dd435604686ba70c44efe7f7f64a4f6e13e380e 100644 (file)
@@ -2153,8 +2153,8 @@ Sema::ActOnFunctionDeclarator(Scope* S, Declarator& D, DeclContext* DC,
     }
   
     NewFD->setParams(Context, &Params[0], Params.size());
-  } else if (isa<TypedefType>(R)) {
-    // When we're declaring a function with a typedef, as in the
+  } else if (const FunctionProtoType *FT = R->getAsFunctionProtoType()) {
+    // When we're declaring a function with a typedef, typeof, etc as in the
     // following example, we'll need to synthesize (unnamed)
     // parameters for use in the declaration.
     //
@@ -2162,20 +2162,19 @@ Sema::ActOnFunctionDeclarator(Scope* S, Declarator& D, DeclContext* DC,
     // typedef void fn(int);
     // fn f;
     // @endcode
-    if (const FunctionProtoType *FT = R->getAsFunctionProtoType()) {
-      // Synthesize a parameter for each argument type.
-      llvm::SmallVector<ParmVarDecl*, 16> Params;
-      for (FunctionProtoType::arg_type_iterator ArgType = FT->arg_type_begin();
-           ArgType != FT->arg_type_end(); ++ArgType) {
-        ParmVarDecl *Param = ParmVarDecl::Create(Context, DC,
-                                                 SourceLocation(), 0,
-                                                 *ArgType, VarDecl::None, 0);
-        Param->setImplicit();
-        Params.push_back(Param);
-      }
-
-      NewFD->setParams(Context, &Params[0], Params.size());
+    
+    // Synthesize a parameter for each argument type.
+    llvm::SmallVector<ParmVarDecl*, 16> Params;
+    for (FunctionProtoType::arg_type_iterator AI = FT->arg_type_begin(),
+         AE = FT->arg_type_end(); AI != AE; ++AI) {
+      ParmVarDecl *Param = ParmVarDecl::Create(Context, DC,
+                                               SourceLocation(), 0,
+                                               *AI, VarDecl::None, 0);
+      Param->setImplicit();
+      Params.push_back(Param);
     }
+
+    NewFD->setParams(Context, &Params[0], Params.size());
   }
     
   // If name lookup finds a previous declaration that is not in the