diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index 4948a773aa5f470af298010cf4c42a74e7cdbd3e..b7507c45cee1a4b19565b20cc209876f49114fff 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)