diff --git a/src/tokenize.cpp b/src/tokenize.cpp index 977040c1b..5d05bd836 100644 --- a/src/tokenize.cpp +++ b/src/tokenize.cpp @@ -533,25 +533,18 @@ void Tokenizer::tokenize(std::istream &code, const char FileName[]) const std::string name2(name + "<" + type2 + ">"); // Create copy of template.. - const Token *tok3 = tok->next(); - for (unsigned int i = 0; i <= type.size(); ++i) - { - if (i == type.size()) - addtoken(tok3->str().c_str(), tok3->linenr(), tok3->fileIndex()); - else if (tok3->str() == type[i]) - { - addtoken(types2[i].c_str(), tok3->linenr(), tok3->fileIndex()); - break; - } - } - addtoken(name2.c_str(), tok3->linenr(), tok3->fileIndex()); int indentlevel = 0; - for (tok3 = tok3->tokAt(2); tok3; tok3 = tok3->next()) + for (const Token *tok3 = tok->next(); tok3; tok3 = tok3->next()) { for (unsigned int i = 0; i <= type.size(); ++i) { if (i == type.size()) - addtoken(tok3->str().c_str(), tok3->linenr(), tok3->fileIndex()); + { + if (tok3->str() == name) + addtoken(name2.c_str(), tok3->linenr(), tok3->fileIndex()); + else + addtoken(tok3->str().c_str(), tok3->linenr(), tok3->fileIndex()); + } else if (tok3->str() == type[i]) { addtoken(types2[i].c_str(), tok3->linenr(), tok3->fileIndex()); diff --git a/test/testsimplifytokens.cpp b/test/testsimplifytokens.cpp index 102516b66..065a6b67c 100644 --- a/test/testsimplifytokens.cpp +++ b/test/testsimplifytokens.cpp @@ -80,6 +80,7 @@ private: TEST_CASE(template1); TEST_CASE(template2); TEST_CASE(template3); + TEST_CASE(template4); TEST_CASE(namespaces); } @@ -494,6 +495,19 @@ private: ASSERT_EQUALS(expected, sizeof_(code)); } + void template4() + { + const char code[] = "template class Fred { Fred(); };\n" + "Fred fred;"; + + const std::string expected(" " + "template < classname T > class Fred { Fred ( ) ; } ; " + "Fred fred ; " + "class Fred { Fred ( ) ; }"); + + ASSERT_EQUALS(expected, sizeof_(code)); + } + void namespaces() {