diff options
Diffstat (limited to 'src/plugins/cpptools/cppchecksymbols.cpp')
-rw-r--r-- | src/plugins/cpptools/cppchecksymbols.cpp | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/src/plugins/cpptools/cppchecksymbols.cpp b/src/plugins/cpptools/cppchecksymbols.cpp index a81692ca9a..5ccd79f909 100644 --- a/src/plugins/cpptools/cppchecksymbols.cpp +++ b/src/plugins/cpptools/cppchecksymbols.cpp @@ -513,7 +513,7 @@ bool CheckSymbols::visit(SimpleDeclarationAST *ast) "CPlusplus::CheckSymbols", "Only virtual methods can be marked `override'")); else if (funTy->isFinal()) warning(declrIdNameAST, QCoreApplication::translate( - "CPlusplus::CheckSymbols", "Only virtual methods can be marked `final'")); + "CPlusPlus::CheckSymbols", "Only virtual methods can be marked `final'")); } } } @@ -664,13 +664,14 @@ bool CheckSymbols::visit(NewExpressionAST *ast) if (binding && nameAST) { int arguments = 0; if (ast->new_initializer) { - if (ExpressionAST *expr = ast->new_initializer->expression) { - while (BinaryExpressionAST *binExpr = expr->asBinaryExpression()) { - expr = binExpr->right_expression; - ++arguments; - } + ExpressionListAST *list = 0; + if (ExpressionListParenAST *exprListParen = ast->new_initializer->asExpressionListParen()) { + list = exprListParen->expression_list; + } else if (BracedInitializerAST *braceInit = ast->new_initializer->asBracedInitializer()) { + list = braceInit->expression_list; } - + for (ExpressionListAST *it = list; it; it = it->next) + ++arguments; } Scope *scope = enclosingScope(); @@ -925,10 +926,17 @@ bool CheckSymbols::visit(MemInitializerAST *ast) } else if (maybeField(nameAST->name)) { maybeAddField(_context.lookup(nameAST->name, klass), nameAST); } else { - // It's a constructor + // It's a constructor, count the number of arguments unsigned arguments = 0; - for (ExpressionListAST *it = ast->expression_list; it; it = it->next) - ++arguments; + if (ast->expression) { + ExpressionListAST *expr_list = 0; + if (ExpressionListParenAST *parenExprList = ast->expression->asExpressionListParen()) + expr_list = parenExprList->expression_list; + else if (BracedInitializerAST *bracedInitList = ast->expression->asBracedInitializer()) + expr_list = bracedInitList->expression_list; + for (ExpressionListAST *it = expr_list; it; it = it->next) + ++arguments; + } maybeAddFunction(_context.lookup(nameAST->name, klass), nameAST, arguments); } @@ -938,7 +946,7 @@ bool CheckSymbols::visit(MemInitializerAST *ast) } } - accept(ast->expression_list); + accept(ast->expression); } return false; @@ -1282,9 +1290,9 @@ bool CheckSymbols::maybeAddFunction(const QList<LookupItem> &candidates, NameAST // Add a diagnostic message if argument count does not match if (matchType == Match_TooFewArgs) - warning(line, column, QCoreApplication::translate("CPlusplus::CheckSymbols", "Too few arguments"), length); + warning(line, column, QCoreApplication::translate("CplusPlus::CheckSymbols", "Too few arguments"), length); else if (matchType == Match_TooManyArgs) - warning(line, column, QCoreApplication::translate("CPlusplus::CheckSymbols", "Too many arguments"), length); + warning(line, column, QCoreApplication::translate("CPlusPlus::CheckSymbols", "Too many arguments"), length); const Use use(line, column, length, kind); addUse(use); |