| 7401 | #define VFA_CPP(...) VALUEFLOW_ADAPTOR(true, __VA_ARGS__) |
| 7402 | |
| 7403 | void ValueFlow::setValues(TokenList& tokenlist, |
| 7404 | SymbolDatabase& symboldatabase, |
| 7405 | ErrorLogger& errorLogger, |
| 7406 | const Settings& settings, |
| 7407 | TimerResultsIntf* timerResults) |
| 7408 | { |
| 7409 | ProgressReporter progressReporter(errorLogger, settings.reportProgress, tokenlist.getSourceFilePath(), "ValueFlow"); |
| 7410 | |
| 7411 | for (Token* tok = tokenlist.front(); tok; tok = tok->next()) |
| 7412 | tok->clearValueFlow(); |
| 7413 | |
| 7414 | // commas in init.. |
| 7415 | for (Token* tok = tokenlist.front(); tok; tok = tok->next()) { |
| 7416 | if (tok->str() != "{" || !tok->astOperand1()) |
| 7417 | continue; |
| 7418 | for (Token* tok2 = tok->next(); tok2 != tok->link(); tok2 = tok2->next()) { |
| 7419 | if (tok2->link() && Token::Match(tok2, "[{[(<]")) |
| 7420 | tok2 = tok2->link(); |
| 7421 | else if (tok2->str() == ",") |
| 7422 | tok2->isInitComma(true); |
| 7423 | } |
| 7424 | } |
| 7425 | |
| 7426 | ValueFlowPassRunner runner{ValueFlowState{tokenlist, symboldatabase, errorLogger, settings}, timerResults}; |
| 7427 | runner.run_once({ |
| 7428 | VFA(valueFlowEnumValueEarly(symboldatabase, settings)), |
| 7429 | VFA(valueFlowNumber(tokenlist, settings)), |
| 7430 | VFA(valueFlowString(tokenlist, settings)), |
| 7431 | VFA(valueFlowTypeTraits(tokenlist, settings)), |
| 7432 | VFA(valueFlowArray(tokenlist, settings)), |
| 7433 | VFA(valueFlowUnknownFunctionReturn(tokenlist, settings)), |
| 7434 | VFA(valueFlowGlobalConstVar(tokenlist, settings)), |
| 7435 | VFA(valueFlowEnumValue(symboldatabase, settings)), |
| 7436 | VFA(valueFlowGlobalStaticVar(tokenlist, settings)), |
| 7437 | VFA(valueFlowPointerAlias(tokenlist, settings)), |
| 7438 | VFA(valueFlowLifetime(tokenlist, errorLogger, settings)), |
| 7439 | VFA(valueFlowSymbolic(tokenlist, symboldatabase, errorLogger, settings)), |
| 7440 | VFA(valueFlowBitAnd(tokenlist, settings)), |
| 7441 | VFA(valueFlowSameExpressions(tokenlist, settings)), |
| 7442 | VFA(valueFlowConditionExpressions(tokenlist, symboldatabase, errorLogger, settings)), |
| 7443 | }); |
| 7444 | |
| 7445 | runner.run({ |
| 7446 | VFA(valueFlowImpossibleValues(tokenlist, settings)), |
| 7447 | VFA(valueFlowSymbolicOperators(symboldatabase, settings)), |
| 7448 | VFA(valueFlowCondition(SymbolicConditionHandler{}, tokenlist, symboldatabase, errorLogger, settings, skippedFunctions)), |
| 7449 | VFA(valueFlowSymbolicInfer(symboldatabase, settings)), |
| 7450 | VFA(valueFlowArrayBool(tokenlist, settings)), |
| 7451 | VFA(valueFlowArrayElement(tokenlist, settings)), |
| 7452 | VFA(valueFlowRightShift(tokenlist, settings)), |
| 7453 | VFA_CPP( |
| 7454 | valueFlowCondition(ContainerConditionHandler{}, tokenlist, symboldatabase, errorLogger, settings, skippedFunctions)), |
| 7455 | VFA(valueFlowAfterAssign(tokenlist, symboldatabase, errorLogger, settings, skippedFunctions)), |
| 7456 | VFA_CPP(valueFlowAfterSwap(tokenlist, symboldatabase, errorLogger, settings)), |
| 7457 | VFA(valueFlowCondition(SimpleConditionHandler{}, tokenlist, symboldatabase, errorLogger, settings, skippedFunctions)), |
| 7458 | VFA(valueFlowInferCondition(tokenlist, settings)), |
| 7459 | VFA(valueFlowSwitchVariable(tokenlist, symboldatabase, errorLogger, settings)), |
| 7460 | VFA(valueFlowForLoop(tokenlist, symboldatabase, errorLogger, settings)), |
nothing calls this directly
no test coverage detected