sizeof: fixed a problem with 'sizeof(varname)' but there are more to fix with it
This commit is contained in:
parent
42176f52ca
commit
7d9bf491ec
|
@ -682,6 +682,35 @@ void Tokenizer::simplifyTokenList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Replace 'sizeof(var)'..
|
||||||
|
for (Token *tok = _tokens; tok; tok = tok->next())
|
||||||
|
{
|
||||||
|
if (Token::Match(tok, "[;{}] %type% %var% ;") && tok->tokAt(2)->varId() > 0)
|
||||||
|
{
|
||||||
|
const unsigned int varid = tok->tokAt(2)->varId();
|
||||||
|
|
||||||
|
// Replace 'sizeof(var)' with 'sizeof(type)'
|
||||||
|
int indentlevel = 0;
|
||||||
|
for (Token *tok2 = tok; tok2; tok2 = tok2->next())
|
||||||
|
{
|
||||||
|
if (tok2->str() == "{")
|
||||||
|
++indentlevel;
|
||||||
|
else if (tok2->str() == "}")
|
||||||
|
{
|
||||||
|
--indentlevel;
|
||||||
|
if (indentlevel < 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (Token::Match(tok2, "sizeof ( %varid% )", varid))
|
||||||
|
{
|
||||||
|
tok2 = tok2->tokAt(2);
|
||||||
|
tok2->str(tok->strAt(1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Replace 'sizeof(type)'..
|
// Replace 'sizeof(type)'..
|
||||||
for (Token *tok = _tokens; tok; tok = tok->next())
|
for (Token *tok = _tokens; tok; tok = tok->next())
|
||||||
{
|
{
|
||||||
|
|
|
@ -116,7 +116,7 @@ private:
|
||||||
TEST_CASE(sizeof2);
|
TEST_CASE(sizeof2);
|
||||||
TEST_CASE(sizeof3);
|
TEST_CASE(sizeof3);
|
||||||
TEST_CASE(sizeof4);
|
TEST_CASE(sizeof4);
|
||||||
// TODO (ticket #108) TEST_CASE(sizeof5);
|
TEST_CASE(sizeof5);
|
||||||
TEST_CASE(simplify_numeric_condition);
|
TEST_CASE(simplify_numeric_condition);
|
||||||
TEST_CASE(tokenize_double);
|
TEST_CASE(tokenize_double);
|
||||||
TEST_CASE(tokenize_strings);
|
TEST_CASE(tokenize_strings);
|
||||||
|
@ -1166,7 +1166,7 @@ private:
|
||||||
|
|
||||||
void sizeof5()
|
void sizeof5()
|
||||||
{
|
{
|
||||||
const char code[] = "int i;\n"
|
const char code[] = ";int i;\n"
|
||||||
"sizeof(i);\n";
|
"sizeof(i);\n";
|
||||||
|
|
||||||
// tokenize..
|
// tokenize..
|
||||||
|
@ -1182,7 +1182,7 @@ private:
|
||||||
ostr << " " << tok->str();
|
ostr << " " << tok->str();
|
||||||
|
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
oss << " int i ; " << sizeof(int);
|
oss << " ; int i ; " << sizeof(int) << " ;";
|
||||||
ASSERT_EQUALS(oss.str(), ostr.str());
|
ASSERT_EQUALS(oss.str(), ostr.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue