summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/Parser.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2010-03-29 14:10:42 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2010-03-29 14:10:42 +0200
commitbbdb7d9742249644a2716c90862ee37324fadb20 (patch)
treea3010da49817780b4abe87853cc1e48608ec4e4c /src/shared/cplusplus/Parser.cpp
parent0af4d51b7a6f3f477696e096134ba097c9aecace (diff)
downloadqt-creator-bbdb7d9742249644a2716c90862ee37324fadb20.tar.gz
Fixed parsing ambiguity when parsing dependant template types.
Diffstat (limited to 'src/shared/cplusplus/Parser.cpp')
-rw-r--r--src/shared/cplusplus/Parser.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index a125683aff..f323241a18 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);