forked from qt-creator/qt-creator
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:
6
src/libs/3rdparty/cplusplus/AST.cpp
vendored
6
src/libs/3rdparty/cplusplus/AST.cpp
vendored
@@ -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;
|
||||
|
||||
2
src/libs/3rdparty/cplusplus/AST.h
vendored
2
src/libs/3rdparty/cplusplus/AST.h
vendored
@@ -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)
|
||||
|
||||
2
src/libs/3rdparty/cplusplus/ASTClone.cpp
vendored
2
src/libs/3rdparty/cplusplus/ASTClone.cpp
vendored
@@ -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);
|
||||
|
||||
5
src/libs/3rdparty/cplusplus/ASTMatcher.cpp
vendored
5
src/libs/3rdparty/cplusplus/ASTMatcher.cpp
vendored
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
1
src/libs/3rdparty/cplusplus/ASTVisit.cpp
vendored
1
src/libs/3rdparty/cplusplus/ASTVisit.cpp
vendored
@@ -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);
|
||||
}
|
||||
|
||||
1
src/libs/3rdparty/cplusplus/Bind.cpp
vendored
1
src/libs/3rdparty/cplusplus/Bind.cpp
vendored
@@ -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);
|
||||
|
||||
6
src/libs/3rdparty/cplusplus/Parser.cpp
vendored
6
src/libs/3rdparty/cplusplus/Parser.cpp
vendored
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user