[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: extragear/sdk/kdevelop/languages/cpp/parser
From: Olivier Jean de Gaalon <olivier.jg () gmail ! com>
Date: 2009-12-16 9:24:20
Message-ID: 1260955460.332335.24838.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 1062837 by olivierjg:
Allow primary and conditional expressions as template arguments, add tests.
BUG: 183092
M +10 -4 parser.cpp
M +13 -0 tests/test_parser.cpp
--- trunk/extragear/sdk/kdevelop/languages/cpp/parser/parser.cpp #1062836:1062837
@@ -1325,14 +1325,20 @@
TypeIdAST *typeId = 0;
ExpressionAST *expr = 0;
- if (!parseTypeId(typeId) || (session->token_stream->lookAhead() != ','
- && session->token_stream->lookAhead() != '>' && \
session->token_stream->lookAhead() != ')')) + if (!parseTypeId(typeId) ||
+ (session->token_stream->lookAhead() != ',' && \
session->token_stream->lookAhead() != '>' && session->token_stream->lookAhead() != \
')')) + {
+ rewind(start);
+
+ if (!parsePrimaryExpression(expr) ||
+ (session->token_stream->lookAhead() != ',' && \
session->token_stream->lookAhead() != '>' && session->token_stream->lookAhead() != \
')')) {
rewind(start);
-
- if (!parseLogicalOrExpression(expr, true))
+
+ if (!parseConditionalExpression(expr))
return false;
}
+ }
TemplateArgumentAST *ast = CreateNode<TemplateArgumentAST>(session->mempool);
ast->type_id = typeId;
--- trunk/extragear/sdk/kdevelop/languages/cpp/parser/tests/test_parser.cpp \
#1062836:1062837 @@ -111,6 +111,19 @@
QVERIFY(ast->declarations != 0);
}
+ void testTemplateArguments()
+ {
+ QByteArray templatetest("template <int N, int M> struct SeriesAdder{ enum { \
value = N + SeriesAdder< 0 >::value }; };"); + pool mem_pool;
+ TranslationUnitAST* ast = parse(templatetest, &mem_pool);
+ QVERIFY(ast != 0);
+ QVERIFY(ast->declarations != 0);
+ for (int i = 0; i < control.problems().count(); i++)
+ {
+ QVERIFY(control.problems().at(i)->description() == "Unexpected end of file");
+ }
+ }
+
void testManyComparisons()
{
//Should not crash
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic