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:
Alexander Mai 2014-06-16 21:36:31 +02:00
parent c61d2b9f41
commit 2e3f26ba58
2 changed files with 14 additions and 12 deletions

View File

@ -7316,8 +7316,9 @@ void Tokenizer::simplifyEnum()
tok = tok->previous();
}
if (Token::Match(tok, "class|struct|namespace") && tok->next() &&
(!tok->previous() || (tok->previous() && tok->previous()->str() != "enum"))) {
if (tok && tok->next() &&
(!tok->previous() || (tok->previous()->str() != "enum")) &&
Token::Match(tok, "class|struct|namespace")) {
className = tok->next()->str();
classLevel = 0;
} else if (tok->str() == "}") {
@ -7347,8 +7348,8 @@ void Tokenizer::simplifyEnum()
// check for name
if (tok->next()->isName()) {
enumType = tok->next();
tok = tok->next();
enumType = tok;
}
// check for C++0x typed enumeration
@ -7360,8 +7361,8 @@ void Tokenizer::simplifyEnum()
return; // can't recover
}
typeTokenStart = tok->next();
tok = tok->next();
typeTokenStart = tok;
typeTokenEnd = typeTokenStart;
while (typeTokenEnd->next() && (typeTokenEnd->next()->str() == "::" ||
@ -7504,6 +7505,9 @@ void Tokenizer::simplifyEnum()
// Substitute enum values
{
if (!tok1)
return;
if (_settings->terminated())
return;
@ -7520,8 +7524,6 @@ void Tokenizer::simplifyEnum()
bool simplify = false;
EnumValue *ev = nullptr;
if (!tok1)
return;
for (Token *tok2 = tok1->next(); tok2; tok2 = tok2->next()) {
if (tok2->str() == "}") {
--level;

View File

@ -1323,10 +1323,10 @@ private:
ASSERT_EQUALS("", errout.str());
}
template<size_t n, typename T>
size_t getArraylength( const T(&)[n]) {
return n;
}
template<size_t n, typename T>
size_t getArraylength(const T(&)[n]) {
return n;
}
void stlBoundaries1() {
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());
// #5926 no FP Dangerous iterator comparison using operator< on 'std::deque'.
check("void f() {\n"
// #5926 no FP Dangerous iterator comparison using operator< on 'std::deque'.
check("void f() {\n"
" std::deque<int>::iterator it;\n"
" for (it = ab.begin(); ab.end() > it; ++it) {}\n"
"}");