CheckAutoVariables: use varId instead of variable names.

This change similar to be89be8c30 but
for vd_list member.
This commit is contained in:
Slava Semushin 2009-08-16 15:46:52 +07:00
parent be89be8c30
commit 475ef4213b
2 changed files with 10 additions and 16 deletions

View File

@ -44,7 +44,6 @@ static CheckAutoVariables instance;
bool CheckAutoVariables::errorAv(const Token* left, const Token* right) bool CheckAutoVariables::errorAv(const Token* left, const Token* right)
{ {
const std::string left_var(left->str()); const std::string left_var(left->str());
const std::string right_var(right->str());
std::list<std::string>::iterator it_fp; std::list<std::string>::iterator it_fp;
for (it_fp = fp_list.begin(); it_fp != fp_list.end(); ++it_fp) for (it_fp = fp_list.begin(); it_fp != fp_list.end(); ++it_fp)
@ -63,12 +62,11 @@ bool CheckAutoVariables::errorAv(const Token* left, const Token* right)
if (it_fp == fp_list.end()) if (it_fp == fp_list.end())
return false; return false;
std::list<std::string>::iterator id_vd; std::list<unsigned int>::const_iterator id_vd;
for (id_vd = vd_list.begin(); id_vd != vd_list.end(); ++id_vd) for (id_vd = vd_list.begin(); id_vd != vd_list.end(); ++id_vd)
{ {
std::string vname(*id_vd);
//The left argument is a variable declaration //The left argument is a variable declaration
if (vname == right_var) if (*id_vd == right->varId())
break; break;
} }
//The left argument is NOT a variable declaration //The left argument is NOT a variable declaration
@ -79,14 +77,12 @@ bool CheckAutoVariables::errorAv(const Token* left, const Token* right)
} }
bool CheckAutoVariables::isAutoVar(const Token* t) bool CheckAutoVariables::isAutoVar(unsigned int varId)
{ {
std::list<std::string>::iterator id_vd; std::list<unsigned int>::iterator id_vd;
std::string v(t->str());
for (id_vd = vd_list.begin(); id_vd != vd_list.end(); ++id_vd) for (id_vd = vd_list.begin(); id_vd != vd_list.end(); ++id_vd)
{ {
std::string vname(*id_vd); if (*id_vd == varId)
if (vname == v)
return true; return true;
} }
return false; return false;
@ -143,10 +139,8 @@ bool isExternOrStatic(const Token *tok)
void CheckAutoVariables::addVD(const Token* tok) void CheckAutoVariables::addVD(const Token* tok)
{ {
std::string var_name(tok->str()); //std::cout << "VD " << tok->linenr() << " " << tok->str() << std::endl;
vd_list.push_back(tok->varId());
//std::cout << "VD " << tok->linenr() << " " << var_name << std::endl;
vd_list.push_back(var_name);
} }
void CheckAutoVariables::addVDA(const Token* tok) void CheckAutoVariables::addVDA(const Token* tok)
@ -231,7 +225,7 @@ void CheckAutoVariables::autoVariables()
} }
else if (bindent > 0 && Token::Match(tok, "return & %var% ;")) //Critical return else if (bindent > 0 && Token::Match(tok, "return & %var% ;")) //Critical return
{ {
if (isAutoVar(tok->tokAt(2))) if (isAutoVar(tok->tokAt(2)->varId()))
reportError(tok, reportError(tok,
Severity::error, Severity::error,
"autoVariables", "autoVariables",

View File

@ -57,10 +57,10 @@ public:
private: private:
std::list<std::string> fp_list; std::list<std::string> fp_list;
std::list<std::string> vd_list; std::list<unsigned int> vd_list;
std::list<unsigned int> vda_list; std::list<unsigned int> vda_list;
bool errorAv(const Token* left, const Token* right); bool errorAv(const Token* left, const Token* right);
bool isAutoVar(const Token* t); bool isAutoVar(unsigned int varId);
bool isAutoVarArray(unsigned int varId); bool isAutoVarArray(unsigned int varId);
void addVD(const Token* t); void addVD(const Token* t);
void addVDA(const Token* t); void addVDA(const Token* t);