summaryrefslogtreecommitdiff
path: root/shared/cplusplus/Parser.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <qtc-committer@nokia.com>2009-01-26 12:58:52 +0100
committerRoberto Raggi <qtc-committer@nokia.com>2009-01-26 12:58:52 +0100
commit5fc4fbb197f539c9904c0b3ba3fd7d382aeefa7d (patch)
treebdf19bddd2387fce0ae9431b1a063ca527960eed /shared/cplusplus/Parser.cpp
parent1e6a62942a4da22572a65cfbb8b560344801e6e8 (diff)
downloadqt-creator-5fc4fbb197f539c9904c0b3ba3fd7d382aeefa7d.tar.gz
Fixes: Parsing of name ids.
Diffstat (limited to 'shared/cplusplus/Parser.cpp')
-rw-r--r--shared/cplusplus/Parser.cpp35
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;