VarId: Set varid for template parameters (#7046)

This commit is contained in:
Daniel Marjamäki 2016-01-31 11:07:30 +01:00
parent 6d0c2f7253
commit c7f5ca74bd
2 changed files with 25 additions and 0 deletions

View File

@ -2788,6 +2788,20 @@ void Tokenizer::setVarId()
if (decl) {
variableId[prev2->str()] = ++_varId;
// set varid for template parameters..
tok = tok->next();
while (Token::Match(tok, "%name%|::"))
tok = tok->next();
if (tok && tok->str() == "<") {
const Token *end = tok->findClosingBracket();
while (tok != end) {
if (tok->isName() && variableId.find(tok->str()) != variableId.end())
tok->varId(variableId[tok->str()]);
tok = tok->next();
}
}
tok = tok2->previous();
}
}

View File

@ -135,6 +135,7 @@ private:
TEST_CASE(varid_templatePtr); // #4319
TEST_CASE(varid_templateNamespaceFuncPtr); // #4172
TEST_CASE(varid_templateArray);
TEST_CASE(varid_templateParameter); // #7046 set varid for "X": std::array<int,X> Y;
TEST_CASE(varid_cppcast); // #6190
TEST_CASE(varid_variadicFunc);
TEST_CASE(varid_typename); // #4644
@ -2135,6 +2136,16 @@ private:
tokenize("VertexArrayIterator<float[2]> attrPos = m_AttributePos.GetIterator<float[2]>();"));
}
void varid_templateParameter() { // #7046 set varid for "X": std::array<int,X> Y;
const char code[] = "const int X = 0;\n"
"std::array<int,X> Y;\n";
ASSERT_EQUALS("\n\n##file 0\n"
"1: const int X@1 = 0 ;\n"
"2: std :: array < int , X@1 > Y@2 ;\n",
tokenize(code));
}
void varid_cppcast() {
ASSERT_EQUALS("\n\n##file 0\n1: const_cast < int * > ( code ) [ 0 ] = 0 ;\n",
tokenize("const_cast<int *>(code)[0] = 0;"));