summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/Parser.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@nokia.com>2010-02-04 14:55:18 +0100
committerErik Verbruggen <erik.verbruggen@nokia.com>2010-02-07 10:49:02 +0100
commitfd90c3503db076b95f2e97455e9e8fcf9c374a88 (patch)
treebf645124798d090cd25483f1b35ba4ea64c8034b /src/shared/cplusplus/Parser.cpp
parent7cdb15e7fc0dd84fc11a91a744faf4e4eb351c8e (diff)
downloadqt-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.cpp36
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;
}