diff options
author | Roberto Raggi <qtc-committer@nokia.com> | 2009-01-26 12:58:52 +0100 |
---|---|---|
committer | Roberto Raggi <qtc-committer@nokia.com> | 2009-01-26 12:58:52 +0100 |
commit | 5fc4fbb197f539c9904c0b3ba3fd7d382aeefa7d (patch) | |
tree | bdf19bddd2387fce0ae9431b1a063ca527960eed /shared/cplusplus/Parser.cpp | |
parent | 1e6a62942a4da22572a65cfbb8b560344801e6e8 (diff) | |
download | qt-creator-5fc4fbb197f539c9904c0b3ba3fd7d382aeefa7d.tar.gz |
Fixes: Parsing of name ids.
Diffstat (limited to 'shared/cplusplus/Parser.cpp')
-rw-r--r-- | shared/cplusplus/Parser.cpp | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/shared/cplusplus/Parser.cpp b/shared/cplusplus/Parser.cpp index eefa3d5b9f..f1b057d31c 100644 --- a/shared/cplusplus/Parser.cpp +++ b/shared/cplusplus/Parser.cpp @@ -2556,24 +2556,12 @@ bool Parser::parsePrimaryExpression(ExpressionAST *&node) return parseQtMethod(node); default: { - unsigned startOfName = cursor(); NameAST *name = 0; - if (parseName(name)) { - if (LA() == T_IDENTIFIER || tok().isLiteral() || (tok().isOperator() && LA() != T_LPAREN && - LA() != T_LBRACKET)) { - rewind(startOfName); - parseName(name, false); - } - // literal - // identifier <unop> ? - // identifier <binop> - // identifier <access> - // identifier rparen - // lparen type rparen identifier [[cast-expression]] - + if (parseNameId(name)) { node = name; return true; } + break; } // default } // switch @@ -2581,6 +2569,23 @@ bool Parser::parsePrimaryExpression(ExpressionAST *&node) return false; } +bool Parser::parseNameId(NameAST *&name) +{ + unsigned start = cursor(); + if (! parseName(name)) + return false; + + if (LA() == T_IDENTIFIER || + tok().isLiteral() || + (tok().isOperator() && LA() != T_LPAREN && LA() != T_LBRACKET)) + { + rewind(start); + return parseName(name, false); + } + + return false; +} + bool Parser::parseNestedExpression(ExpressionAST *&node) { if (LA() == T_LPAREN) { @@ -2763,7 +2768,7 @@ bool Parser::parsePostfixExpression(ExpressionAST *&node) ast->access_token = consumeToken(); if (LA() == T_TEMPLATE) ast->template_token = consumeToken(); - if (! parseName(ast->member_name)) + if (! parseNameId(ast->member_name)) _translationUnit->error(cursor(), "expected unqualified-id before token `%s'", tok().spell()); *postfix_ptr = ast; |