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.cpp28
1 files changed, 18 insertions, 10 deletions
diff --git a/src/plugins/cpptools/cppchecksymbols.cpp b/src/plugins/cpptools/cppchecksymbols.cpp
index dcd1358b94..e9679394ce 100644
--- a/src/plugins/cpptools/cppchecksymbols.cpp
+++ b/src/plugins/cpptools/cppchecksymbols.cpp
@@ -662,13 +662,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();
@@ -923,10 +924,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);
}
@@ -936,7 +944,7 @@ bool CheckSymbols::visit(MemInitializerAST *ast)
}
}
- accept(ast->expression_list);
+ accept(ast->expression);
}
return false;