Removed Tokenizer::simplifyStructInit simplification.
This commit is contained in:
parent
432ff8fa7b
commit
d1927e3492
|
@ -3534,9 +3534,6 @@ bool Tokenizer::simplifyTokenList1(const char FileName[])
|
||||||
// struct simplification "struct S {} s; => struct S { } ; S s ;
|
// struct simplification "struct S {} s; => struct S { } ; S s ;
|
||||||
simplifyStructDecl();
|
simplifyStructDecl();
|
||||||
|
|
||||||
// struct initialization (must be used after simplifyVarDecl)
|
|
||||||
simplifyStructInit();
|
|
||||||
|
|
||||||
// The simplifyTemplates have inner loops
|
// The simplifyTemplates have inner loops
|
||||||
if (_settings->terminated())
|
if (_settings->terminated())
|
||||||
return false;
|
return false;
|
||||||
|
@ -8899,59 +8896,6 @@ std::string Tokenizer::simplifyString(const std::string &source)
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Tokenizer::simplifyStructInit()
|
|
||||||
{
|
|
||||||
for (Token *tok = list.front(); tok; tok = tok->next()) {
|
|
||||||
if (Token::Match(tok, "[;{}] struct| %type% %var% ; %var% = { . %type% =")) {
|
|
||||||
tok = Token::findsimplematch(tok->tokAt(3), ";");
|
|
||||||
if (tok->strAt(-1) != tok->strAt(1))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// Goto "." and check if the initializations have an expected format
|
|
||||||
const Token *tok2 = tok;
|
|
||||||
while (tok2->str() != ".")
|
|
||||||
tok2 = tok2->next();
|
|
||||||
while (tok2 && tok2->str() == ".") {
|
|
||||||
if (Token::Match(tok2, ". %type% = %num%|%var% [,}]"))
|
|
||||||
tok2 = tok2->tokAt(4);
|
|
||||||
else if (Token::Match(tok2, ". %type% = & %var% [,}]"))
|
|
||||||
tok2 = tok2->tokAt(5);
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (Token::simpleMatch(tok2, ", ."))
|
|
||||||
tok2 = tok2->next();
|
|
||||||
}
|
|
||||||
if (!Token::simpleMatch(tok2, "} ;"))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// Known expression format => Perform simplification
|
|
||||||
Token *vartok = tok->next();
|
|
||||||
if (vartok->str() == "=")
|
|
||||||
vartok = vartok->previous();
|
|
||||||
vartok->next()->str(";");
|
|
||||||
|
|
||||||
Token *tok3 = vartok->tokAt(2);
|
|
||||||
tok3->link(0);
|
|
||||||
while (Token::Match(tok3, "[{,] . %type% =")) {
|
|
||||||
tok3->str(vartok->str());
|
|
||||||
tok3->varId(vartok->varId());
|
|
||||||
tok3 = tok3->tokAt(5);
|
|
||||||
while (!Token::Match(tok3, "[,}]"))
|
|
||||||
tok3 = tok3->next();
|
|
||||||
if (tok3->str() == "}") {
|
|
||||||
tok3->deleteThis();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
tok3->previous()->insertToken(";");
|
|
||||||
}
|
|
||||||
vartok->deleteNext(2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Tokenizer::simplifyConst()
|
void Tokenizer::simplifyConst()
|
||||||
{
|
{
|
||||||
for (Token *tok = list.front(); tok; tok = tok->next()) {
|
for (Token *tok = list.front(); tok; tok = tok->next()) {
|
||||||
|
|
|
@ -223,9 +223,6 @@ private:
|
||||||
// while(fclose(f)); => r = fclose(f); while(r){r=fclose(f);}
|
// while(fclose(f)); => r = fclose(f); while(r){r=fclose(f);}
|
||||||
TEST_CASE(simplifyFuncInWhile);
|
TEST_CASE(simplifyFuncInWhile);
|
||||||
|
|
||||||
// struct ABC abc = { .a = 3 }; => struct ABC abc; abc.a = 3;
|
|
||||||
TEST_CASE(initstruct);
|
|
||||||
|
|
||||||
// struct ABC { } abc; => struct ABC { }; ABC abc;
|
// struct ABC { } abc; => struct ABC { }; ABC abc;
|
||||||
TEST_CASE(simplifyStructDecl1);
|
TEST_CASE(simplifyStructDecl1);
|
||||||
TEST_CASE(simplifyStructDecl2); // ticket #2579
|
TEST_CASE(simplifyStructDecl2); // ticket #2579
|
||||||
|
@ -3448,16 +3445,6 @@ private:
|
||||||
tok("while(fclose(f)); while(fclose(g));"));
|
tok("while(fclose(f)); while(fclose(g));"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void initstruct() {
|
|
||||||
ASSERT_EQUALS("; struct A a ; a . buf = 3 ;", tok("; struct A a ; a = { .buf = 3 };"));
|
|
||||||
ASSERT_EQUALS("; struct A a ; a . buf = x ;", tok("; struct A a ; a = { .buf = x };"));
|
|
||||||
ASSERT_EQUALS("; struct A a ; a . buf = & key ;", tok("; struct A a ; a = { .buf = &key };"));
|
|
||||||
ASSERT_EQUALS("; struct ABC abc ; abc . a = 3 ; abc . b = x ; abc . c = & key ;", tok("; struct ABC abc = { .a = 3, .b = x, .c = &key };"));
|
|
||||||
TODO_ASSERT_EQUALS("; struct A a ; a . buf = { 0 } ;",
|
|
||||||
"; struct A a ; a = { . buf = { 0 } } ;",
|
|
||||||
tok("; struct A a = { .buf = {0} };"));
|
|
||||||
}
|
|
||||||
|
|
||||||
void simplifyStructDecl1() {
|
void simplifyStructDecl1() {
|
||||||
{
|
{
|
||||||
const char code[] = "struct ABC { } abc;";
|
const char code[] = "struct ABC { } abc;";
|
||||||
|
|
Loading…
Reference in New Issue