diff options
author | Erik Verbruggen <erik.verbruggen@nokia.com> | 2010-02-04 14:55:18 +0100 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@nokia.com> | 2010-02-07 10:49:02 +0100 |
commit | fd90c3503db076b95f2e97455e9e8fcf9c374a88 (patch) | |
tree | bf645124798d090cd25483f1b35ba4ea64c8034b /src/shared/cplusplus/Parser.cpp | |
parent | 7cdb15e7fc0dd84fc11a91a744faf4e4eb351c8e (diff) | |
download | qt-creator-fd90c3503db076b95f2e97455e9e8fcf9c374a88.tar.gz |
Added AST nodes for compound expressions (a GNU extension).
Diffstat (limited to 'src/shared/cplusplus/Parser.cpp')
-rw-r--r-- | src/shared/cplusplus/Parser.cpp | 36 |
1 files changed, 17 insertions, 19 deletions
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index de66dbfac8..84a92a186a 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -3437,7 +3437,19 @@ bool Parser::parsePrimaryExpression(ExpressionAST *&node) return parseThisExpression(node); case T_LPAREN: - return parseNestedExpression(node); + if (LA(2) == T_LBRACE) { + // GNU extension: '(' '{' statement-list '}' ')' + CompoundExpressionAST *ast = new (_pool) CompoundExpressionAST; + ast->lparen_token = consumeToken(); + StatementAST *statement = 0; + parseCompoundStatement(statement); + ast->compoundStatement = statement->asCompoundStatement(); + match(T_RPAREN, &ast->rparen_token); + node = ast; + return true; + } else { + return parseNestedExpression(node); + } case T_SIGNAL: case T_SLOT: @@ -3799,19 +3811,6 @@ bool Parser::parseNestedExpression(ExpressionAST *&node) DEBUG_THIS_RULE(); if (LA() == T_LPAREN) { unsigned lparen_token = consumeToken(); - - if (LA() == T_LBRACE) { - NestedExpressionAST *ast = new (_pool) NestedExpressionAST; - ast->lparen_token = lparen_token; - - // ### ast - StatementAST *statement = 0; - parseCompoundStatement(statement); - match(T_RPAREN, &ast->rparen_token); - node = ast; - return true; - } - bool previousTemplateArguments = switchTemplateArguments(false); ExpressionAST *expression = 0; @@ -5275,12 +5274,11 @@ bool Parser::parseObjCContextKeyword(int kind, unsigned &in_token) { DEBUG_THIS_RULE(); - if (peekAtObjCContextKeyword(kind)) { - in_token = consumeToken(); - return true; - } else { + if (!peekAtObjCContextKeyword(kind)) return false; - } + + in_token = consumeToken(); + return true; } |