summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/Parser.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-10-20 15:01:45 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2009-10-20 15:01:45 +0200
commit3ed4a743c0bef8a8bf911c7fd5bce1760e43003a (patch)
treeabb310df34209e37db0d3282ac033403b12610dd /src/shared/cplusplus/Parser.cpp
parentbd7c7e0e55c9bf29b6926277f3abc96245747f92 (diff)
downloadqt-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.cpp25
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)