Skip to content

Commit 607c3b5

Browse files
committed
moved SymbolicInferModel to infer.{cpp|h}
1 parent 66d53a2 commit 607c3b5

File tree

3 files changed

+30
-23
lines changed

3 files changed

+30
-23
lines changed

lib/infer.cpp

+26
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,32 @@ ValuePtr<InferModel> makeIntegralInferModel()
408408
return IntegralInferModel{};
409409
}
410410

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

lib/infer.h

+2
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ std::vector<MathLib::bigint> getMaxValue(const ValuePtr<InferModel>& model, cons
5959

6060
ValuePtr<InferModel> makeIntegralInferModel();
6161

62+
ValuePtr<InferModel> makeSymbolicInferModel(const Token* token);
63+
6264
ValueFlow::Value inferCondition(const std::string& op, const Token* varTok, MathLib::bigint val);
6365

6466
#endif

lib/vf_symbolicinfer.cpp

+2-23
Original file line numberDiff line numberDiff line change
@@ -20,39 +20,18 @@
2020

2121
#include "astutils.h"
2222
#include "infer.h"
23-
#include "mathlib.h"
2423
#include "symboldatabase.h"
2524
#include "token.h"
2625
#include "valueptr.h"
2726
#include "vfvalue.h"
2827

2928
#include "vf_settokenvalue.h"
3029

31-
#include <cassert>
3230
#include <utility>
3331
#include <vector>
3432

3533
namespace ValueFlow
3634
{
37-
struct SymbolicInferModel : InferModel {
38-
const Token* expr;
39-
explicit SymbolicInferModel(const Token* tok) : expr(tok) {
40-
assert(expr->exprId() != 0);
41-
}
42-
bool match(const Value& value) const override
43-
{
44-
return value.isSymbolicValue() && value.tokvalue && value.tokvalue->exprId() == expr->exprId();
45-
}
46-
Value yield(MathLib::bigint value) const override
47-
{
48-
Value result(value);
49-
result.valueType = Value::ValueType::SYMBOLIC;
50-
result.tokvalue = expr;
51-
result.setKnown();
52-
return result;
53-
}
54-
};
55-
5635
void valueFlowSymbolicInfer(const SymbolDatabase& symboldatabase, const Settings& settings)
5736
{
5837
for (const Scope* scope : symboldatabase.functionScopes) {
@@ -78,10 +57,10 @@ namespace ValueFlow
7857
if (astIsFloat(tok->astOperand2(), false))
7958
continue;
8059

81-
SymbolicInferModel leftModel{tok->astOperand1()};
60+
auto leftModel = makeSymbolicInferModel(tok->astOperand1());
8261
std::vector<Value> values = infer(leftModel, tok->str(), 0, tok->astOperand2()->values());
8362
if (values.empty()) {
84-
SymbolicInferModel rightModel{tok->astOperand2()};
63+
auto rightModel = makeSymbolicInferModel(tok->astOperand2());
8564
values = infer(rightModel, tok->str(), tok->astOperand1()->values(), 0);
8665
}
8766
for (Value& value : values) {

0 commit comments

Comments
 (0)