24 SymbolicMapping symbolicMap;
31 class SubstVisitor :
public Transform {
40 const IR::Literal *preorder(IR::StateVariable *var)
override;
41 const IR::Literal *preorder(IR::SymbolicVariable *var)
override;
42 const IR::Literal *preorder(IR::TaintExpression *var)
override;
44 explicit SubstVisitor(
const Model &model,
bool doComplete);
49 using ExpressionMap = std::map<const IR::Expression *, const IR::Literal *>;
52 explicit Model(SymbolicMapping symbolicMap) : symbolicMap(
std::move(symbolicMap)) {}
65 const IR::Literal *
evaluate(
const IR::Expression *expr,
bool doComplete,
66 ExpressionMap *resolvedExpressions =
nullptr)
const;
70 const IR::StructExpression *evaluateStructExpr(
71 const IR::StructExpression *structExpr,
bool doComplete,
72 ExpressionMap *resolvedExpressions =
nullptr)
const;
76 const IR::BaseListExpression *evaluateListExpr(
77 const IR::BaseListExpression *listExpr,
bool doComplete,
78 ExpressionMap *resolvedExpressions =
nullptr)
const;
83 [[nodiscard]]
const IR::Expression *
get(
const IR::SymbolicVariable *var,
bool checked)
const;
88 void set(
const IR::SymbolicVariable *var,
const IR::Expression *val);
91 void mergeMap(
const SymbolicMapping &sourceMap);