summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppchecksymbols.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/cpptools/cppchecksymbols.cpp')
-rw-r--r--src/plugins/cpptools/cppchecksymbols.cpp34
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);