C++11: Allow uniform initialization in ctor init lists.

So
class C { C() : _x{12}, _y({12}) {} };
now parses correctly.

Change-Id: I4281dcb0541a86b550e74630cad6ae0a59fef1b4
Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
Christian Kamm
2012-09-17 09:58:09 +02:00
committed by hjk
parent 903ba378c2
commit b9f6f1bcf7
16 changed files with 88 additions and 71 deletions

View File

@@ -924,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);
}
@@ -937,7 +944,7 @@ bool CheckSymbols::visit(MemInitializerAST *ast)
}
}
accept(ast->expression_list);
accept(ast->expression);
}
return false;