Refactor: Use visitAstNodes in checkcondition

This commit is contained in:
Rikard Falkeborn 2020-07-10 00:50:57 +02:00
parent 82fe6193fa
commit 9ced26a7a1
1 changed files with 17 additions and 29 deletions

View File

@ -688,16 +688,11 @@ void CheckCondition::multiCondition2()
ErrorPath errorPath;
if (type == MULTICONDITIONTYPE::INNER) {
std::stack<const Token *> tokens1;
tokens1.push(cond1);
while (!tokens1.empty()) {
const Token *firstCondition = tokens1.top();
tokens1.pop();
visitAstNodes(cond1, [&](const Token* firstCondition) {
if (!firstCondition)
continue;
return ChildrenToVisit::none;
if (firstCondition->str() == "&&") {
tokens1.push(firstCondition->astOperand1());
tokens1.push(firstCondition->astOperand2());
return ChildrenToVisit::op1_and_op2;
} else if (!firstCondition->hasKnownIntValue()) {
if (!isReturnVar && isOppositeCond(false, mTokenizer->isCPP(), firstCondition, cond2, mSettings->library, true, true, &errorPath)) {
if (!isAliased(vars))
@ -706,7 +701,8 @@ void CheckCondition::multiCondition2()
identicalInnerConditionError(firstCondition, cond2, errorPath);
}
}
}
return ChildrenToVisit::none;
});
} else {
visitAstNodes(cond2, [&](const Token *secondCondition) {
if (secondCondition->str() == "||" || secondCondition->str() == "&&")
@ -1436,20 +1432,15 @@ void CheckCondition::alwaysTrueFalse()
// Don't warn when there are expanded macros..
bool isExpandedMacro = false;
std::stack<const Token*> tokens;
tokens.push(tok);
while (!tokens.empty()) {
const Token *tok2 = tokens.top();
tokens.pop();
visitAstNodes(tok, [&](const Token * tok2) {
if (!tok2)
continue;
tokens.push(tok2->astOperand1());
tokens.push(tok2->astOperand2());
return ChildrenToVisit::none;
if (tok2->isExpandedMacro()) {
isExpandedMacro = true;
break;
return ChildrenToVisit::done;
}
}
return ChildrenToVisit::op1_and_op2;
});
if (isExpandedMacro)
continue;
for (const Token *parent = tok; parent; parent = parent->astParent()) {
@ -1464,24 +1455,21 @@ void CheckCondition::alwaysTrueFalse()
// don't warn when condition checks sizeof result
bool hasSizeof = false;
bool hasNonNumber = false;
tokens.push(tok);
while (!tokens.empty()) {
const Token *tok2 = tokens.top();
tokens.pop();
visitAstNodes(tok, [&](const Token * tok2) {
if (!tok2)
continue;
return ChildrenToVisit::none;
if (tok2->isNumber())
continue;
return ChildrenToVisit::none;
if (Token::simpleMatch(tok2->previous(), "sizeof (")) {
hasSizeof = true;
continue;
return ChildrenToVisit::none;
}
if (tok2->isComparisonOp() || tok2->isArithmeticalOp()) {
tokens.push(tok2->astOperand1());
tokens.push(tok2->astOperand2());
return ChildrenToVisit::op1_and_op2;
} else
hasNonNumber = true;
}
return ChildrenToVisit::none;
});
if (!hasNonNumber && hasSizeof)
continue;