From 5fc4fbb197f539c9904c0b3ba3fd7d382aeefa7d Mon Sep 17 00:00:00 2001 From: Roberto Raggi <qtc-committer@nokia.com> Date: Mon, 26 Jan 2009 12:58:52 +0100 Subject: [PATCH] Fixes: Parsing of name ids. --- shared/cplusplus/Parser.cpp | 35 ++++++++++++++++++++--------------- shared/cplusplus/Parser.h | 1 + 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/shared/cplusplus/Parser.cpp b/shared/cplusplus/Parser.cpp index eefa3d5b9fe..f1b057d31ca 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; diff --git a/shared/cplusplus/Parser.h b/shared/cplusplus/Parser.h index 75fad457fad..d99d8d27fc0 100644 --- a/shared/cplusplus/Parser.h +++ b/shared/cplusplus/Parser.h @@ -141,6 +141,7 @@ public: bool parseMultiplicativeExpression(ExpressionAST *&node); bool parseTemplateId(NameAST *&node); bool parseClassOrNamespaceName(NameAST *&node); + bool parseNameId(NameAST *&node); bool parseName(NameAST *&node, bool acceptTemplateId = true); bool parseNestedNameSpecifier(NestedNameSpecifierAST *&node, bool acceptTemplateId); bool parseNestedNameSpecifierOpt(NestedNameSpecifierAST *&name, bool acceptTemplateId); -- GitLab