tokenizer: fixed issues related to variable ids
* use setVarId in simplifyTokenList * make sure function parameters and variables declared in for example for loops get variable ids
This commit is contained in:
parent
ba28c07f9d
commit
4aef89c311
|
@ -541,7 +541,13 @@ void Tokenizer::setVarId()
|
||||||
else if (tok2->str() == "(")
|
else if (tok2->str() == "(")
|
||||||
++parlevel;
|
++parlevel;
|
||||||
else if (tok2->str() == ")")
|
else if (tok2->str() == ")")
|
||||||
--parlevel;
|
{
|
||||||
|
// Is this a function parameter or a variable declared in for example a for loop?
|
||||||
|
if (parlevel==0 && indentlevel==0 && Token::Match(tok2, ") const| {"))
|
||||||
|
;
|
||||||
|
else
|
||||||
|
--parlevel;
|
||||||
|
}
|
||||||
else if (parlevel < 0 && tok2->str() == ";")
|
else if (parlevel < 0 && tok2->str() == ";")
|
||||||
break;
|
break;
|
||||||
dot = bool(tok2->str() == ".");
|
dot = bool(tok2->str() == ".");
|
||||||
|
@ -922,8 +928,6 @@ void Tokenizer::simplifyTokenList()
|
||||||
|
|
||||||
if (Token::Match(next, "* ( %var% + %num% )"))
|
if (Token::Match(next, "* ( %var% + %num% )"))
|
||||||
{
|
{
|
||||||
unsigned int varid = tok->tokAt(3)->varId();
|
|
||||||
|
|
||||||
const char *str[4] = {"var", "[", "num", "]"};
|
const char *str[4] = {"var", "[", "num", "]"};
|
||||||
str[0] = tok->strAt(3);
|
str[0] = tok->strAt(3);
|
||||||
str[2] = tok->strAt(5);
|
str[2] = tok->strAt(5);
|
||||||
|
@ -932,8 +936,6 @@ void Tokenizer::simplifyTokenList()
|
||||||
{
|
{
|
||||||
tok = tok->next();
|
tok = tok->next();
|
||||||
tok->str(str[i]);
|
tok->str(str[i]);
|
||||||
if (i == 0)
|
|
||||||
tok->varId(varid);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tok->deleteNext();
|
tok->deleteNext();
|
||||||
|
@ -1052,6 +1054,9 @@ void Tokenizer::simplifyTokenList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// In case variable declarations have been updated...
|
||||||
|
setVarId();
|
||||||
|
|
||||||
// Replace NULL with 0..
|
// Replace NULL with 0..
|
||||||
for (Token *tok = _tokens; tok; tok = tok->next())
|
for (Token *tok = _tokens; tok; tok = tok->next())
|
||||||
{
|
{
|
||||||
|
|
|
@ -94,7 +94,7 @@ private:
|
||||||
TEST_CASE(varid2);
|
TEST_CASE(varid2);
|
||||||
TEST_CASE(varid3);
|
TEST_CASE(varid3);
|
||||||
TEST_CASE(varid4);
|
TEST_CASE(varid4);
|
||||||
// TODO TEST_CASE(varid5); // There is currently a problem for "int a,b;" => "int a; int b;"
|
TEST_CASE(varid5);
|
||||||
|
|
||||||
TEST_CASE(file1);
|
TEST_CASE(file1);
|
||||||
TEST_CASE(file2);
|
TEST_CASE(file2);
|
||||||
|
@ -745,7 +745,6 @@ private:
|
||||||
Tokenizer tokenizer;
|
Tokenizer tokenizer;
|
||||||
std::istringstream istr(code);
|
std::istringstream istr(code);
|
||||||
tokenizer.tokenize(istr, "test.cpp");
|
tokenizer.tokenize(istr, "test.cpp");
|
||||||
tokenizer.setVarId();
|
|
||||||
tokenizer.simplifyTokenList();
|
tokenizer.simplifyTokenList();
|
||||||
|
|
||||||
// result..
|
// result..
|
||||||
|
|
Loading…
Reference in New Issue