forked from OSchip/llvm-project
Simplify FunctionDecl::getMinRequiredArguments().
llvm-svn: 205351
This commit is contained in:
parent
068fc01234
commit
911517848d
|
@ -2534,35 +2534,15 @@ void FunctionDecl::setDeclsInPrototypeScope(ArrayRef<NamedDecl *> NewDecls) {
|
|||
/// getMinRequiredArguments - Returns the minimum number of arguments
|
||||
/// needed to call this function. This may be fewer than the number of
|
||||
/// function parameters, if some of the parameters have default
|
||||
/// arguments (in C++) or the last parameter is a parameter pack.
|
||||
/// arguments (in C++) or are parameter packs (C++11).
|
||||
unsigned FunctionDecl::getMinRequiredArguments() const {
|
||||
if (!getASTContext().getLangOpts().CPlusPlus)
|
||||
return getNumParams();
|
||||
|
||||
unsigned NumRequiredArgs = getNumParams();
|
||||
|
||||
// If the last parameter is a parameter pack, we don't need an argument for
|
||||
// it.
|
||||
if (NumRequiredArgs > 0 &&
|
||||
getParamDecl(NumRequiredArgs - 1)->isParameterPack())
|
||||
--NumRequiredArgs;
|
||||
|
||||
// If this parameter has a default argument, we don't need an argument for
|
||||
// it.
|
||||
while (NumRequiredArgs > 0 &&
|
||||
getParamDecl(NumRequiredArgs-1)->hasDefaultArg())
|
||||
--NumRequiredArgs;
|
||||
|
||||
// We might have parameter packs before the end. These can't be deduced,
|
||||
// but they can still handle multiple arguments.
|
||||
unsigned ArgIdx = NumRequiredArgs;
|
||||
while (ArgIdx > 0) {
|
||||
if (getParamDecl(ArgIdx - 1)->isParameterPack())
|
||||
NumRequiredArgs = ArgIdx;
|
||||
|
||||
--ArgIdx;
|
||||
}
|
||||
|
||||
unsigned NumRequiredArgs = 0;
|
||||
for (auto *Param : params())
|
||||
if (!Param->isParameterPack() && !Param->hasDefaultArg())
|
||||
++NumRequiredArgs;
|
||||
return NumRequiredArgs;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue