Refactor: Use visitAstNodes in checkcondition
This commit is contained in:
parent
82fe6193fa
commit
9ced26a7a1
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue