Move simplification of realloc after simplification of math ops

This commit is contained in:
Raphael Geissert 2011-01-02 16:41:34 -06:00
parent d2714fefda
commit e75a81669e
1 changed files with 30 additions and 30 deletions

View File

@ -4076,36 +4076,6 @@ bool Tokenizer::simplifyTokenList()
simplifyCasts();
// simplify "x=realloc(y,0);" => "free(y); x=0;"..
for (Token *tok = _tokens; tok; tok = tok->next())
{
if (Token::Match(tok, "; %var% = realloc ( %var% , 0 ) ;"))
{
const std::string varname(tok->next()->str());
const unsigned int varid(tok->next()->varId());
// Delete the "%var% ="
tok->deleteNext();
tok->deleteNext();
// Change function name "realloc" to "free"
tok->next()->str("free");
// delete the ", 0"
Token::eraseTokens(tok->tokAt(3), tok->tokAt(6));
// goto the ";"
tok = tok->tokAt(5);
// insert "var=0;"
tok->insertToken(";");
tok->insertToken("0");
tok->insertToken("=");
tok->insertToken(varname);
tok->next()->varId(varid);
}
}
// Simplify simple calculations..
simplifyCalculations();
@ -4145,6 +4115,36 @@ bool Tokenizer::simplifyTokenList()
}
}
// simplify "x=realloc(y,0);" => "free(y); x=0;"..
for (Token *tok = _tokens; tok; tok = tok->next())
{
if (Token::Match(tok, "; %var% = realloc ( %var% , 0 ) ;"))
{
const std::string varname(tok->next()->str());
const unsigned int varid(tok->next()->varId());
// Delete the "%var% ="
tok->deleteNext();
tok->deleteNext();
// Change function name "realloc" to "free"
tok->next()->str("free");
// delete the ", 0"
Token::eraseTokens(tok->tokAt(3), tok->tokAt(6));
// goto the ";"
tok = tok->tokAt(5);
// insert "var=0;"
tok->insertToken(";");
tok->insertToken("0");
tok->insertToken("=");
tok->insertToken(varname);
tok->next()->varId(varid);
}
}
// Change initialisation of variable to assignment
simplifyInitVar();