From e9b342c56b18263cc336ace69fda1c83c60832e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sat, 5 Dec 2009 21:15:14 +0100 Subject: [PATCH] Fixed #1046 (tokenizer: internal error for 'discard_block< (1 << 24), 10, 24 > u, v;') --- lib/tokenize.cpp | 14 +++++++++++++- test/testtokenize.cpp | 9 +++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index d36a10dca..30f1841e3 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -3052,7 +3052,7 @@ void Tokenizer::simplifyVarDecl() // if (Token::simpleMatch(tok2, "std ::")) { - typelen += 1; + typelen += 2; tok2 = tok2->tokAt(2); } @@ -3097,6 +3097,7 @@ void Tokenizer::simplifyVarDecl() if (Token::Match(tok2, "%var% ,")) { tok2 = tok2->next(); // The ',' token + typelen--; } else { @@ -3117,6 +3118,17 @@ void Tokenizer::simplifyVarDecl() { tok2->str(";"); insertTokens(tok2, type0, typelen); + std::list link; + while (((typelen--) > 0) && (0 != (tok2 = tok2->next()))) + { + if (tok2->str() == "(") + link.push_back(tok2); + else if (tok2->str() == ")" && !link.empty()) + { + Token::createMutualLinks(tok2, link.back()); + link.pop_back(); + } + } } else diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index e1a1f9168..f762cfdc9 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -153,6 +153,7 @@ private: TEST_CASE(vardecl9); TEST_CASE(vardecl10); TEST_CASE(vardecl_stl); + TEST_CASE(vardecl_template); TEST_CASE(volatile_variables); TEST_CASE(syntax_error); @@ -2349,6 +2350,14 @@ private: ASSERT_EQUALS(res3, tokenizeAndStringify(code3)); } + void vardecl_template() + { + // ticket #1046 + const char code1[] = "b<(1<<24),10,24> u, v;"; + const char res1[] = "b < ( 1 << 24 ) , 10 , 24 > u ; b < ( 1 << 24 ) , 10 , 24 > v ;"; + ASSERT_EQUALS(res1, tokenizeAndStringify(code1)); + } + void vardec_static() { {