Refactorizations:
- Call std::string::find() with char instead of char* where possible - Avoid string copying - Optimized several Token::tokAt/strAt calls
This commit is contained in:
parent
1dca7c2162
commit
1627b19dd6
|
@ -401,7 +401,7 @@ bool CmdLineParser::ParseFromArgs(int argc, const char* const argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
// No "=", append a "=1"
|
// No "=", append a "=1"
|
||||||
if (define.find("=") == std::string::npos)
|
if (define.find('=') == std::string::npos)
|
||||||
define += "=1";
|
define += "=1";
|
||||||
|
|
||||||
if (!_settings->userDefines.empty())
|
if (!_settings->userDefines.empty())
|
||||||
|
|
|
@ -53,7 +53,7 @@ static bool astGetSizeSign(const Settings *settings, const Token *tok, unsigned
|
||||||
return !tok->astOperand2() || astGetSizeSign(settings, tok->astOperand2(), size, sign);
|
return !tok->astOperand2() || astGetSizeSign(settings, tok->astOperand2(), size, sign);
|
||||||
}
|
}
|
||||||
if (tok->isNumber() && MathLib::isInt(tok->str())) {
|
if (tok->isNumber() && MathLib::isInt(tok->str())) {
|
||||||
if (tok->str().find("L") != std::string::npos)
|
if (tok->str().find('L') != std::string::npos)
|
||||||
return false;
|
return false;
|
||||||
MathLib::bigint value = MathLib::toLongNumber(tok->str());
|
MathLib::bigint value = MathLib::toLongNumber(tok->str());
|
||||||
unsigned int sz;
|
unsigned int sz;
|
||||||
|
|
|
@ -1224,24 +1224,24 @@ void CheckUnusedVar::checkStructMemberUsage()
|
||||||
structname.clear();
|
structname.clear();
|
||||||
|
|
||||||
if (!structname.empty() && Token::Match(tok, "[{;]")) {
|
if (!structname.empty() && Token::Match(tok, "[{;]")) {
|
||||||
// Declaring struct variable..
|
|
||||||
std::string varname;
|
|
||||||
|
|
||||||
// declaring a POD variable?
|
// declaring a POD variable?
|
||||||
if (!tok->next()->isStandardType())
|
if (!tok->next()->isStandardType())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
// Declaring struct variable..
|
||||||
|
const std::string* varname;
|
||||||
|
|
||||||
if (Token::Match(tok->next(), "%type% %name% [;[]"))
|
if (Token::Match(tok->next(), "%type% %name% [;[]"))
|
||||||
varname = tok->strAt(2);
|
varname = &tok->strAt(2);
|
||||||
else if (Token::Match(tok->next(), "%type% %type%|* %name% [;[]"))
|
else if (Token::Match(tok->next(), "%type% %type%|* %name% [;[]"))
|
||||||
varname = tok->strAt(3);
|
varname = &tok->strAt(3);
|
||||||
else if (Token::Match(tok->next(), "%type% %type% * %name% [;[]"))
|
else if (Token::Match(tok->next(), "%type% %type% * %name% [;[]"))
|
||||||
varname = tok->strAt(4);
|
varname = &tok->strAt(4);
|
||||||
else
|
else
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Check if the struct variable is used anywhere in the file
|
// Check if the struct variable is used anywhere in the file
|
||||||
const std::string usagePattern(". " + varname);
|
const std::string usagePattern(". " + *varname);
|
||||||
bool used = false;
|
bool used = false;
|
||||||
for (const Token *tok2 = _tokenizer->tokens(); tok2; tok2 = tok2->next()) {
|
for (const Token *tok2 = _tokenizer->tokens(); tok2; tok2 = tok2->next()) {
|
||||||
if (Token::simpleMatch(tok2, usagePattern.c_str())) {
|
if (Token::simpleMatch(tok2, usagePattern.c_str())) {
|
||||||
|
@ -1251,7 +1251,7 @@ void CheckUnusedVar::checkStructMemberUsage()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! used) {
|
if (! used) {
|
||||||
unusedStructMemberError(tok->next(), structname, varname);
|
unusedStructMemberError(tok->next(), structname, *varname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,7 +88,7 @@ void ErrorLogger::ErrorMessage::setmsg(const std::string &msg)
|
||||||
// The summary and verbose message are separated by a newline
|
// The summary and verbose message are separated by a newline
|
||||||
// If there is no newline then both the summary and verbose messages
|
// If there is no newline then both the summary and verbose messages
|
||||||
// are the given message
|
// are the given message
|
||||||
const std::string::size_type pos = msg.find("\n");
|
const std::string::size_type pos = msg.find('\n');
|
||||||
if (pos == std::string::npos) {
|
if (pos == std::string::npos) {
|
||||||
_shortMessage = msg;
|
_shortMessage = msg;
|
||||||
_verboseMessage = msg;
|
_verboseMessage = msg;
|
||||||
|
|
|
@ -397,7 +397,7 @@ template<> std::string MathLib::toString(double value)
|
||||||
result << value;
|
result << value;
|
||||||
if (result.str() == "-0")
|
if (result.str() == "-0")
|
||||||
return "0.0";
|
return "0.0";
|
||||||
if (result.str().find(".") == std::string::npos)
|
if (result.str().find('.') == std::string::npos)
|
||||||
return result.str() + ".0";
|
return result.str() + ".0";
|
||||||
return result.str();
|
return result.str();
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,10 +78,10 @@ namespace {
|
||||||
std::string Settings::addEnabled(const std::string &str)
|
std::string Settings::addEnabled(const std::string &str)
|
||||||
{
|
{
|
||||||
// Enable parameters may be comma separated...
|
// Enable parameters may be comma separated...
|
||||||
if (str.find(",") != std::string::npos) {
|
if (str.find(',') != std::string::npos) {
|
||||||
std::string::size_type prevPos = 0;
|
std::string::size_type prevPos = 0;
|
||||||
std::string::size_type pos = 0;
|
std::string::size_type pos = 0;
|
||||||
while ((pos = str.find(",", pos)) != std::string::npos) {
|
while ((pos = str.find(',', pos)) != std::string::npos) {
|
||||||
if (pos == prevPos)
|
if (pos == prevPos)
|
||||||
return std::string("cppcheck: --enable parameter is empty");
|
return std::string("cppcheck: --enable parameter is empty");
|
||||||
const std::string errmsg(addEnabled(str.substr(prevPos, pos - prevPos)));
|
const std::string errmsg(addEnabled(str.substr(prevPos, pos - prevPos)));
|
||||||
|
|
|
@ -66,11 +66,11 @@ std::string Suppressions::addSuppressionLine(const std::string &line)
|
||||||
// is a line number..
|
// is a line number..
|
||||||
|
|
||||||
// Get position of last colon
|
// Get position of last colon
|
||||||
const std::string::size_type pos = file.rfind(":");
|
const std::string::size_type pos = file.rfind(':');
|
||||||
|
|
||||||
// if a colon is found and there is no dot after it..
|
// if a colon is found and there is no dot after it..
|
||||||
if (pos != std::string::npos &&
|
if (pos != std::string::npos &&
|
||||||
file.find(".", pos) == std::string::npos) {
|
file.find('.', pos) == std::string::npos) {
|
||||||
// Try to parse out the line number
|
// Try to parse out the line number
|
||||||
try {
|
try {
|
||||||
std::istringstream istr1(file.substr(pos+1));
|
std::istringstream istr1(file.substr(pos+1));
|
||||||
|
|
|
@ -3192,8 +3192,8 @@ const Function* Scope::findFunction(const Token *tok, bool requireConst) const
|
||||||
if (MathLib::isInt(arguments[j]->str())) {
|
if (MathLib::isInt(arguments[j]->str())) {
|
||||||
if (arguments[j]->str().find("ll") != std::string::npos ||
|
if (arguments[j]->str().find("ll") != std::string::npos ||
|
||||||
arguments[j]->str().find("LL") != std::string::npos) {
|
arguments[j]->str().find("LL") != std::string::npos) {
|
||||||
if (arguments[j]->str().find("u") != std::string::npos ||
|
if (arguments[j]->str().find('u') != std::string::npos ||
|
||||||
arguments[j]->str().find("U") != std::string::npos) {
|
arguments[j]->str().find('U') != std::string::npos) {
|
||||||
if (funcarg->typeStartToken()->str() == "long" &&
|
if (funcarg->typeStartToken()->str() == "long" &&
|
||||||
funcarg->typeStartToken()->isLong() &&
|
funcarg->typeStartToken()->isLong() &&
|
||||||
funcarg->typeStartToken()->isUnsigned()) {
|
funcarg->typeStartToken()->isUnsigned()) {
|
||||||
|
@ -3206,10 +3206,10 @@ const Function* Scope::findFunction(const Token *tok, bool requireConst) const
|
||||||
same++;
|
same++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (arguments[j]->str().find("l") != std::string::npos ||
|
} else if (arguments[j]->str().find('l') != std::string::npos ||
|
||||||
arguments[j]->str().find("L") != std::string::npos) {
|
arguments[j]->str().find('L') != std::string::npos) {
|
||||||
if (arguments[j]->str().find("u") != std::string::npos ||
|
if (arguments[j]->str().find('u') != std::string::npos ||
|
||||||
arguments[j]->str().find("U") != std::string::npos) {
|
arguments[j]->str().find('U') != std::string::npos) {
|
||||||
if (funcarg->typeStartToken()->str() == "long" &&
|
if (funcarg->typeStartToken()->str() == "long" &&
|
||||||
!funcarg->typeStartToken()->isLong() &&
|
!funcarg->typeStartToken()->isLong() &&
|
||||||
funcarg->typeStartToken()->isUnsigned()) {
|
funcarg->typeStartToken()->isUnsigned()) {
|
||||||
|
@ -3222,8 +3222,8 @@ const Function* Scope::findFunction(const Token *tok, bool requireConst) const
|
||||||
same++;
|
same++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (arguments[j]->str().find("u") != std::string::npos ||
|
} else if (arguments[j]->str().find('u') != std::string::npos ||
|
||||||
arguments[j]->str().find("U") != std::string::npos) {
|
arguments[j]->str().find('U') != std::string::npos) {
|
||||||
if (funcarg->typeStartToken()->str() == "int" &&
|
if (funcarg->typeStartToken()->str() == "int" &&
|
||||||
funcarg->typeStartToken()->isUnsigned()) {
|
funcarg->typeStartToken()->isUnsigned()) {
|
||||||
same++;
|
same++;
|
||||||
|
@ -3239,13 +3239,13 @@ const Function* Scope::findFunction(const Token *tok, bool requireConst) const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (arguments[j]->str().find("f") != std::string::npos ||
|
if (arguments[j]->str().find('f') != std::string::npos ||
|
||||||
arguments[j]->str().find("F") != std::string::npos) {
|
arguments[j]->str().find('F') != std::string::npos) {
|
||||||
if (funcarg->typeStartToken()->str() == "float") {
|
if (funcarg->typeStartToken()->str() == "float") {
|
||||||
same++;
|
same++;
|
||||||
}
|
}
|
||||||
} else if (arguments[j]->str().find("l") != std::string::npos ||
|
} else if (arguments[j]->str().find('l') != std::string::npos ||
|
||||||
arguments[j]->str().find("L") != std::string::npos) {
|
arguments[j]->str().find('L') != std::string::npos) {
|
||||||
if (funcarg->typeStartToken()->str() == "double" &&
|
if (funcarg->typeStartToken()->str() == "double" &&
|
||||||
funcarg->typeStartToken()->isLong()) {
|
funcarg->typeStartToken()->isLong()) {
|
||||||
same++;
|
same++;
|
||||||
|
@ -3344,8 +3344,8 @@ const Function* SymbolDatabase::findFunction(const Token *tok) const
|
||||||
|
|
||||||
if (currScope) {
|
if (currScope) {
|
||||||
while (currScope && !Token::Match(tok1, "%type% :: %any% (")) {
|
while (currScope && !Token::Match(tok1, "%type% :: %any% (")) {
|
||||||
currScope = currScope->findRecordInNestedList(tok1->strAt(2));
|
|
||||||
tok1 = tok1->tokAt(2);
|
tok1 = tok1->tokAt(2);
|
||||||
|
currScope = currScope->findRecordInNestedList(tok1->str());
|
||||||
}
|
}
|
||||||
|
|
||||||
tok1 = tok1->tokAt(2);
|
tok1 = tok1->tokAt(2);
|
||||||
|
|
|
@ -943,7 +943,7 @@ bool TemplateSimplifier::simplifyNumericCalculations(Token *tok)
|
||||||
while (tok->tokAt(4) && tok->next()->isNumber() && tok->tokAt(3)->isNumber()) { // %any% %num% %any% %num% %any%
|
while (tok->tokAt(4) && tok->next()->isNumber() && tok->tokAt(3)->isNumber()) { // %any% %num% %any% %num% %any%
|
||||||
const Token* op = tok->tokAt(2);
|
const Token* op = tok->tokAt(2);
|
||||||
const Token* after = tok->tokAt(4);
|
const Token* after = tok->tokAt(4);
|
||||||
if (Token::Match(tok, "* %num% /") && (tok->strAt(3) != "0") && tok->next()->str() == MathLib::multiply(tok->strAt(3), MathLib::divide(tok->next()->str(), tok->strAt(3)))) {
|
if (Token::Match(tok, "* %num% /") && (op->strAt(1) != "0") && tok->next()->str() == MathLib::multiply(op->strAt(1), MathLib::divide(tok->next()->str(), op->strAt(1)))) {
|
||||||
// Division where result is a whole number
|
// Division where result is a whole number
|
||||||
} else if (!((op->str() == "*" && (isLowerThanMulDiv(tok) || tok->str() == "*") && isLowerEqualThanMulDiv(after)) || // associative
|
} else if (!((op->str() == "*" && (isLowerThanMulDiv(tok) || tok->str() == "*") && isLowerEqualThanMulDiv(after)) || // associative
|
||||||
(Token::Match(op, "[/%]") && isLowerThanMulDiv(tok) && isLowerEqualThanMulDiv(after)) || // NOT associative
|
(Token::Match(op, "[/%]") && isLowerThanMulDiv(tok) && isLowerEqualThanMulDiv(after)) || // NOT associative
|
||||||
|
|
|
@ -1506,14 +1506,14 @@ void Tokenizer::simplifyTypedef()
|
||||||
}
|
}
|
||||||
} else if (typeOf) {
|
} else if (typeOf) {
|
||||||
tok2 = copyTokens(tok2, argStart, argEnd);
|
tok2 = copyTokens(tok2, argStart, argEnd);
|
||||||
} else if (tok2->tokAt(2) && tok2->strAt(2) == "[") {
|
} else if (tok2->strAt(2) == "[") {
|
||||||
while (tok2->tokAt(2) && tok2->strAt(2) == "[") {
|
do {
|
||||||
if (!tok2->linkAt(2)) {
|
if (!tok2->linkAt(2)) {
|
||||||
syntaxError(tok2); // #6807
|
syntaxError(tok2); // #6807
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
tok2 = tok2->linkAt(2)->previous();
|
tok2 = tok2->linkAt(2)->previous();
|
||||||
}
|
} while (tok2->strAt(2) == "[");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (arrayStart && arrayEnd) {
|
if (arrayStart && arrayEnd) {
|
||||||
|
@ -2864,9 +2864,10 @@ void Tokenizer::setVarId()
|
||||||
if (!isC()) {
|
if (!isC()) {
|
||||||
for (Token *tok2 = list.front(); tok2; tok2 = tok2->next()) {
|
for (Token *tok2 = list.front(); tok2; tok2 = tok2->next()) {
|
||||||
if (Token::Match(tok2, "%name% :: %name%")) {
|
if (Token::Match(tok2, "%name% :: %name%")) {
|
||||||
if (tok2->strAt(3) == "(")
|
const std::string& str3 = tok2->strAt(3);
|
||||||
|
if (str3 == "(")
|
||||||
allMemberFunctions.push_back(tok2);
|
allMemberFunctions.push_back(tok2);
|
||||||
else if (tok2->strAt(3) != "::" && tok2->strAt(-1) != "::") // Support only one depth
|
else if (str3 != "::" && tok2->strAt(-1) != "::") // Support only one depth
|
||||||
allMemberVars.push_back(tok2);
|
allMemberVars.push_back(tok2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue