From bbdb7d9742249644a2716c90862ee37324fadb20 Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Mon, 29 Mar 2010 14:10:42 +0200 Subject: [PATCH] Fixed parsing ambiguity when parsing dependant template types. --- src/shared/cplusplus/Parser.cpp | 18 +++++++++++++++++- src/shared/cplusplus/Parser.h | 1 + 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index a125683aff2..f323241a187 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -1568,10 +1568,26 @@ bool Parser::parseTemplateTypeParameter(DeclarationAST *&node) return false; } +bool Parser::lookAtTypeParameter() const +{ + if ((LA() == T_CLASS || LA() == T_TYPENAME) && LA(2) == T_IDENTIFIER) { + switch (LA(3)) { + case T_EQUAL: + case T_COMMA: + case T_GREATER: + return true; + } + } + + return false; +} + + bool Parser::parseTypeParameter(DeclarationAST *&node) { DEBUG_THIS_RULE(); - if (LA() == T_CLASS || LA() == T_TYPENAME) + + if (lookAtTypeParameter()) return parseTypenameTypeParameter(node); else if (LA() == T_TEMPLATE) return parseTemplateTypeParameter(node); diff --git a/src/shared/cplusplus/Parser.h b/src/shared/cplusplus/Parser.h index ff546cada91..4ff708b1cc6 100644 --- a/src/shared/cplusplus/Parser.h +++ b/src/shared/cplusplus/Parser.h @@ -280,6 +280,7 @@ public: bool skipUntilStatement(); bool skip(int l, int r); + bool lookAtTypeParameter() const; bool lookAtCVQualifier() const; bool lookAtFunctionSpecifier() const; bool lookAtStorageClassSpecifier() const; -- GitLab