diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2009-10-20 15:01:45 +0200 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2009-10-20 15:01:45 +0200 |
commit | 3ed4a743c0bef8a8bf911c7fd5bce1760e43003a (patch) | |
tree | abb310df34209e37db0d3282ac033403b12610dd /src/shared/cplusplus/Parser.cpp | |
parent | bd7c7e0e55c9bf29b6926277f3abc96245747f92 (diff) | |
download | qt-creator-3ed4a743c0bef8a8bf911c7fd5bce1760e43003a.tar.gz |
Check the lookahead token before to start the parse of core-postfix expressions.
Diffstat (limited to 'src/shared/cplusplus/Parser.cpp')
-rw-r--r-- | src/shared/cplusplus/Parser.cpp | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index 4948a773aa..b7507c45ce 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -3441,13 +3441,21 @@ bool Parser::parseTypeidExpression(ExpressionAST *&node) bool Parser::parseCorePostfixExpression(ExpressionAST *&node) { DEBUG_THIS_RULE(); - if (parseCppCastExpression(node)) - return true; - else if (parseTypenameCallExpression(node)) - return true; - else if (parseTypeidExpression(node)) - return true; - else { + + switch (LA()) { + case T_DYNAMIC_CAST: + case T_STATIC_CAST: + case T_REINTERPRET_CAST: + case T_CONST_CAST: + return parseCppCastExpression(node); + + case T_TYPENAME: + return parseTypenameCallExpression(node); + + case T_TYPEID: + return parseTypeidExpression(node); + + default: { unsigned start = cursor(); SpecifierAST *type_specifier = 0; bool blocked = blockErrors(true); @@ -3494,7 +3502,8 @@ bool Parser::parseCorePostfixExpression(ExpressionAST *&node) blockErrors(blocked); return parsePrimaryExpression(node); - } + } // default + } // switch } bool Parser::parsePostfixExpression(ExpressionAST *&node) |