Skip to content

Commit 2e2278c

Browse files
committed
moved SymbolicInferModel to infer.{cpp|h}
1 parent 1af769e commit 2e2278c

3 files changed

Lines changed: 30 additions & 21 deletions

File tree

lib/infer.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,32 @@ ValuePtr<InferModel> makeIntegralInferModel()
409409
return IntegralInferModel{};
410410
}
411411

412+
namespace {
413+
struct SymbolicInferModel : InferModel {
414+
const Token* expr;
415+
explicit SymbolicInferModel(const Token* tok) : expr(tok) {
416+
assert(expr->exprId() != 0);
417+
}
418+
bool match(const ValueFlow::Value& value) const override
419+
{
420+
return value.isSymbolicValue() && value.tokvalue && value.tokvalue->exprId() == expr->exprId();
421+
}
422+
ValueFlow::Value yield(MathLib::bigint value) const override
423+
{
424+
ValueFlow::Value result(value);
425+
result.valueType = ValueFlow::Value::ValueType::SYMBOLIC;
426+
result.tokvalue = expr;
427+
result.setKnown();
428+
return result;
429+
}
430+
};
431+
}
432+
433+
ValuePtr<InferModel> makeSymbolicInferModel(const Token* token)
434+
{
435+
return SymbolicInferModel{token};
436+
}
437+
412438
ValueFlow::Value inferCondition(const std::string& op, const Token* varTok, MathLib::bigint val)
413439
{
414440
if (!varTok)

lib/infer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ std::vector<MathLib::bigint> getMaxValue(const ValuePtr<InferModel>& model, cons
6363

6464
ValuePtr<InferModel> makeIntegralInferModel();
6565

66+
ValuePtr<InferModel> makeSymbolicInferModel(const Token* token);
67+
6668
ValueFlow::Value inferCondition(const std::string& op, const Token* varTok, MathLib::bigint val);
6769

6870
#endif

lib/valueflow.cpp

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3877,25 +3877,6 @@ static void valueFlowSymbolicOperators(const SymbolDatabase& symboldatabase, con
38773877
}
38783878
}
38793879

3880-
struct SymbolicInferModel : InferModel {
3881-
const Token* expr;
3882-
explicit SymbolicInferModel(const Token* tok) : expr(tok) {
3883-
assert(expr->exprId() != 0);
3884-
}
3885-
bool match(const ValueFlow::Value& value) const override
3886-
{
3887-
return value.isSymbolicValue() && value.tokvalue && value.tokvalue->exprId() == expr->exprId();
3888-
}
3889-
ValueFlow::Value yield(MathLib::bigint value) const override
3890-
{
3891-
ValueFlow::Value result(value);
3892-
result.valueType = ValueFlow::Value::ValueType::SYMBOLIC;
3893-
result.tokvalue = expr;
3894-
result.setKnown();
3895-
return result;
3896-
}
3897-
};
3898-
38993880
static void valueFlowSymbolicInfer(const SymbolDatabase& symboldatabase, const Settings& settings)
39003881
{
39013882
for (const Scope* scope : symboldatabase.functionScopes) {
@@ -3923,11 +3904,11 @@ static void valueFlowSymbolicInfer(const SymbolDatabase& symboldatabase, const S
39233904

39243905
std::vector<ValueFlow::Value> values;
39253906
{
3926-
SymbolicInferModel leftModel{tok->astOperand1()};
3907+
auto leftModel = makeSymbolicInferModel(tok->astOperand1());
39273908
values = infer(leftModel, tok->str(), 0, tok->astOperand2()->values());
39283909
}
39293910
if (values.empty()) {
3930-
SymbolicInferModel rightModel{tok->astOperand2()};
3911+
auto rightModel = makeSymbolicInferModel(tok->astOperand2());
39313912
values = infer(rightModel, tok->str(), tok->astOperand1()->values(), 0);
39323913
}
39333914
for (ValueFlow::Value& value : values) {

0 commit comments

Comments
 (0)