forked from qt-creator/qt-creator
C++: handle non-arguments in function parameter scope gracefuly
Task-number: QTCREATORBUG-8316 Change-Id: I8897f75f30d3aeaf049cc792060c582ab1e3343d Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
This commit is contained in:
committed by
Nikolai Kosjar
parent
9d7e786b03
commit
857457e057
31
src/libs/3rdparty/cplusplus/Symbols.cpp
vendored
31
src/libs/3rdparty/cplusplus/Symbols.cpp
vendored
@@ -284,17 +284,32 @@ bool Function::hasReturnType() const
|
||||
|
||||
unsigned Function::argumentCount() const
|
||||
{
|
||||
unsigned c = memberCount();
|
||||
if (c > 0 && memberAt(0)->type()->isVoidType())
|
||||
const unsigned memCnt = memberCount();
|
||||
if (memCnt > 0 && memberAt(0)->type()->isVoidType())
|
||||
return 0;
|
||||
// Definitions with function-try-blocks will have more than a block.
|
||||
while (c > 0 && memberAt(c - 1)->isBlock())
|
||||
--c;
|
||||
return c;
|
||||
|
||||
// Definitions with function-try-blocks will have more than a block, and
|
||||
// arguments with a lambda as default argument will also have more blocks.
|
||||
unsigned argc = 0;
|
||||
for (unsigned it = 0; it < memCnt; ++it)
|
||||
if (memberAt(it)->isArgument())
|
||||
++argc;
|
||||
return argc;
|
||||
}
|
||||
|
||||
Symbol *Function::argumentAt(unsigned index) const
|
||||
{ return memberAt(index); }
|
||||
{
|
||||
for (unsigned it = 0, eit = memberCount(); it < eit; ++it) {
|
||||
if (Argument *arg = memberAt(it)->asArgument()) {
|
||||
if (index == 0)
|
||||
return arg;
|
||||
else
|
||||
--index;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool Function::hasArguments() const
|
||||
{
|
||||
@@ -381,7 +396,7 @@ bool Function::maybeValidPrototype(unsigned actualArgumentCount) const
|
||||
for (; minNumberArguments < argc; ++minNumberArguments) {
|
||||
Argument *arg = argumentAt(minNumberArguments)->asArgument();
|
||||
|
||||
if (! arg) // TODO: Fix me properly - QTCREATORBUG-8316
|
||||
if (! arg)
|
||||
return false;
|
||||
|
||||
if (arg->hasInitializer())
|
||||
|
||||
Reference in New Issue
Block a user