Patch from Dmitry-Me: reorder checks so that cheaper ones go first, reuse previously computed values, return early on edge condition
This commit is contained in:
parent
c61d2b9f41
commit
2e3f26ba58
|
@ -7316,8 +7316,9 @@ void Tokenizer::simplifyEnum()
|
||||||
tok = tok->previous();
|
tok = tok->previous();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Token::Match(tok, "class|struct|namespace") && tok->next() &&
|
if (tok && tok->next() &&
|
||||||
(!tok->previous() || (tok->previous() && tok->previous()->str() != "enum"))) {
|
(!tok->previous() || (tok->previous()->str() != "enum")) &&
|
||||||
|
Token::Match(tok, "class|struct|namespace")) {
|
||||||
className = tok->next()->str();
|
className = tok->next()->str();
|
||||||
classLevel = 0;
|
classLevel = 0;
|
||||||
} else if (tok->str() == "}") {
|
} else if (tok->str() == "}") {
|
||||||
|
@ -7347,8 +7348,8 @@ void Tokenizer::simplifyEnum()
|
||||||
|
|
||||||
// check for name
|
// check for name
|
||||||
if (tok->next()->isName()) {
|
if (tok->next()->isName()) {
|
||||||
enumType = tok->next();
|
|
||||||
tok = tok->next();
|
tok = tok->next();
|
||||||
|
enumType = tok;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for C++0x typed enumeration
|
// check for C++0x typed enumeration
|
||||||
|
@ -7360,8 +7361,8 @@ void Tokenizer::simplifyEnum()
|
||||||
return; // can't recover
|
return; // can't recover
|
||||||
}
|
}
|
||||||
|
|
||||||
typeTokenStart = tok->next();
|
|
||||||
tok = tok->next();
|
tok = tok->next();
|
||||||
|
typeTokenStart = tok;
|
||||||
typeTokenEnd = typeTokenStart;
|
typeTokenEnd = typeTokenStart;
|
||||||
|
|
||||||
while (typeTokenEnd->next() && (typeTokenEnd->next()->str() == "::" ||
|
while (typeTokenEnd->next() && (typeTokenEnd->next()->str() == "::" ||
|
||||||
|
@ -7504,6 +7505,9 @@ void Tokenizer::simplifyEnum()
|
||||||
|
|
||||||
// Substitute enum values
|
// Substitute enum values
|
||||||
{
|
{
|
||||||
|
if (!tok1)
|
||||||
|
return;
|
||||||
|
|
||||||
if (_settings->terminated())
|
if (_settings->terminated())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -7520,8 +7524,6 @@ void Tokenizer::simplifyEnum()
|
||||||
bool simplify = false;
|
bool simplify = false;
|
||||||
EnumValue *ev = nullptr;
|
EnumValue *ev = nullptr;
|
||||||
|
|
||||||
if (!tok1)
|
|
||||||
return;
|
|
||||||
for (Token *tok2 = tok1->next(); tok2; tok2 = tok2->next()) {
|
for (Token *tok2 = tok1->next(); tok2; tok2 = tok2->next()) {
|
||||||
if (tok2->str() == "}") {
|
if (tok2->str() == "}") {
|
||||||
--level;
|
--level;
|
||||||
|
|
|
@ -1323,10 +1323,10 @@ private:
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
template<size_t n, typename T>
|
template<size_t n, typename T>
|
||||||
size_t getArraylength( const T(&)[n]) {
|
size_t getArraylength(const T(&)[n]) {
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
void stlBoundaries1() {
|
void stlBoundaries1() {
|
||||||
const std::string stlCont[] = {
|
const std::string stlCont[] = {
|
||||||
|
@ -1351,8 +1351,8 @@ private:
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("[test.cpp:3]: (error) Dangerous iterator comparison using operator< on 'std::forward_list'.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:3]: (error) Dangerous iterator comparison using operator< on 'std::forward_list'.\n", errout.str());
|
||||||
|
|
||||||
// #5926 no FP Dangerous iterator comparison using operator< on 'std::deque'.
|
// #5926 no FP Dangerous iterator comparison using operator< on 'std::deque'.
|
||||||
check("void f() {\n"
|
check("void f() {\n"
|
||||||
" std::deque<int>::iterator it;\n"
|
" std::deque<int>::iterator it;\n"
|
||||||
" for (it = ab.begin(); ab.end() > it; ++it) {}\n"
|
" for (it = ab.begin(); ab.end() > it; ++it) {}\n"
|
||||||
"}");
|
"}");
|
||||||
|
|
Loading…
Reference in New Issue