C++11: Allow brace-init-list in range-for statement.

Also drop the unused 'initializer' member from
RangeBasedForStatementAST.

Change-Id: I078ebbc85cafa643af4bfe62d698bf7de71360e4
Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
Christian Kamm
2012-09-18 09:50:23 +02:00
committed by hjk
parent ecd54059d3
commit 9bd86e7d68
12 changed files with 12 additions and 22 deletions

View File

@@ -4362,9 +4362,6 @@ unsigned RangeBasedForStatementAST::firstToken() const
if (declarator)
if (unsigned candidate = declarator->firstToken())
return candidate;
if (initializer)
if (unsigned candidate = initializer->firstToken())
return candidate;
if (colon_token)
return colon_token;
if (expression)
@@ -4391,9 +4388,6 @@ unsigned RangeBasedForStatementAST::lastToken() const
return candidate;
if (colon_token)
return colon_token + 1;
if (initializer)
if (unsigned candidate = initializer->lastToken())
return candidate;
if (declarator)
if (unsigned candidate = declarator->lastToken())
return candidate;

View File

@@ -1921,7 +1921,6 @@ public:
SpecifierListAST *type_specifier_list;
DeclaratorAST *declarator;
// or an expression
ExpressionAST *initializer;
unsigned colon_token;
ExpressionAST *expression;
unsigned rparen_token;
@@ -1936,7 +1935,6 @@ public:
, lparen_token(0)
, type_specifier_list(0)
, declarator(0)
, initializer(0)
, colon_token(0)
, expression(0)
, rparen_token(0)

View File

@@ -681,8 +681,6 @@ RangeBasedForStatementAST *RangeBasedForStatementAST::clone(MemoryPool *pool) co
*ast_iter = new (pool) SpecifierListAST((iter->value) ? iter->value->clone(pool) : 0);
if (declarator)
ast->declarator = declarator->clone(pool);
if (initializer)
ast->initializer = initializer->clone(pool);
ast->colon_token = colon_token;
if (expression)
ast->expression = expression->clone(pool);

View File

@@ -1154,11 +1154,6 @@ bool ASTMatcher::match(RangeBasedForStatementAST *node, RangeBasedForStatementAS
else if (! AST::match(node->declarator, pattern->declarator, this))
return false;
if (! pattern->initializer)
pattern->initializer = node->initializer;
else if (! AST::match(node->initializer, pattern->initializer, this))
return false;
pattern->colon_token = node->colon_token;
if (! pattern->expression)

View File

@@ -447,12 +447,11 @@ public:
return __ast;
}
RangeBasedForStatementAST *RangeBasedForStatement(SpecifierListAST *type_specifier_list = 0, DeclaratorAST *declarator = 0, ExpressionAST *initializer = 0, ExpressionAST *expression = 0, StatementAST *statement = 0)
RangeBasedForStatementAST *RangeBasedForStatement(SpecifierListAST *type_specifier_list = 0, DeclaratorAST *declarator = 0, ExpressionAST *expression = 0, StatementAST *statement = 0)
{
RangeBasedForStatementAST *__ast = new (&pool) RangeBasedForStatementAST;
__ast->type_specifier_list = type_specifier_list;
__ast->declarator = declarator;
__ast->initializer = initializer;
__ast->expression = expression;
__ast->statement = statement;
return __ast;

View File

@@ -493,7 +493,6 @@ void RangeBasedForStatementAST::accept0(ASTVisitor *visitor)
if (visitor->visit(this)) {
accept(type_specifier_list, visitor);
accept(declarator, visitor);
accept(initializer, visitor);
accept(expression, visitor);
accept(statement, visitor);
}

View File

@@ -1332,7 +1332,6 @@ bool Bind::visit(RangeBasedForStatementAST *ast)
block->addMember(decl);
}
/*ExpressionTy initializer =*/ this->expression(ast->initializer);
/*ExpressionTy expression =*/ this->expression(ast->expression);
this->statement(ast->statement);
(void) switchScope(previousScope);

View File

@@ -3429,7 +3429,11 @@ bool Parser::parseForStatement(StatementAST *&node)
ast->colon_token = consumeToken();
blockErrors(blocked);
parseExpression(ast->expression);
if (LA() == T_LBRACE) {
parseBracedInitList0x(ast->expression);
} else {
parseExpression(ast->expression);
}
match(T_RPAREN, &ast->rparen_token);
parseStatement(ast->statement);