From bf9b900c301454ab719da097a8c3ff6281f4a3fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Thu, 27 Dec 2012 18:15:00 +0100 Subject: [PATCH] Tokenizer::setVarId: Fixed problem with initializer lists (#4436) --- lib/tokenize.cpp | 7 +++++-- test/testtokenize.cpp | 13 +++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 0fb2e60dc..51ada82a3 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -2818,7 +2818,7 @@ void Tokenizer::setVarId() std::map varlist; const Token* tokStart = Token::findsimplematch(tok, "{"); if (tokStart) { - for (const Token *tok2 = tokStart->next(); tok2 != tok->link(); tok2 = tok2->next()) { + for (const Token *tok2 = tokStart->next(); tok2 != tokStart->link(); tok2 = tok2->next()) { // skip parentheses.. if (tok2->str() == "{") tok2 = tok2->link(); @@ -2866,8 +2866,11 @@ void Tokenizer::setVarId() // constructor with initializer list if (Token::Match(tok2, ") : %var% (")) { - const Token *tok3 = tok2; + Token *tok3 = tok2; while (Token::Match(tok3, ") [:,] %var% (")) { + Token *vartok = tok3->tokAt(2); + if (varlist.find(vartok->str()) != varlist.end()) + vartok->varId(varlist[vartok->str()]); tok3 = tok3->linkAt(3); } if (Token::simpleMatch(tok3, ") {")) { diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp index a5f375a27..691af6f75 100644 --- a/test/testtokenize.cpp +++ b/test/testtokenize.cpp @@ -4067,6 +4067,19 @@ private: "3: int x@2 ;\n" "4: } ;\n", tokenizeDebugListing(code2)); + + const char code3[] = "class A {\n" + " A(int x);\n" + " int x;\n" + "};\n" + "A::A(int x) : x(x) {}"; + ASSERT_EQUALS("\n\n##file 0\n" + "1: class A {\n" + "2: A ( int x@1 ) ;\n" + "3: int x@2 ;\n" + "4: } ;\n" + "5: A :: A ( int x@3 ) : x@2 ( x@3 ) { }\n", + tokenizeDebugListing(code3)); } void varid_operator() {