37 const IR::Literal *preorder(IR::StateVariable *var)
override;
38 const IR::Literal *preorder(IR::SymbolicVariable *var)
override;
39 const IR::Literal *preorder(IR::TaintExpression *var)
override;
41 explicit SubstVisitor(
const Model &model,
bool doComplete);
46 using ExpressionMap = std::map<const IR::Expression *, const IR::Literal *>;
62 const IR::Literal *
evaluate(
const IR::Expression *expr,
bool doComplete,
63 ExpressionMap *resolvedExpressions =
nullptr)
const;
67 const IR::StructExpression *evaluateStructExpr(
68 const IR::StructExpression *structExpr,
bool doComplete,
69 ExpressionMap *resolvedExpressions =
nullptr)
const;
73 const IR::BaseListExpression *evaluateListExpr(
74 const IR::BaseListExpression *listExpr,
bool doComplete,
75 ExpressionMap *resolvedExpressions =
nullptr)
const;
80 [[nodiscard]]
const IR::Expression *
get(
const IR::SymbolicVariable *var,
bool checked)
const;
85 void set(
const IR::SymbolicVariable *var,
const IR::Expression *val);