ESBMC
Efficient SMT-based Context-Bounded Model Checker
Loading...
Searching...
No Matches
smt_tuple_node_ast.h
Go to the documentation of this file.
1#ifndef SOLVERS_SMT_TUPLE_SMT_TUPLE_NODE_AST_H_
2#define SOLVERS_SMT_TUPLE_SMT_TUPLE_NODE_AST_H_
3
5
8
10
24{
25public:
33 smt_sortt s,
34 std::string _name)
35 : smt_ast(ctx, s),
36 name(std::move(_name)),
37 flat(f),
38 creation_ctx_level(ctx->ctx_level)
39 {
40 }
41 ~tuple_node_smt_ast() override = default;
42
45 const std::string name;
46
48 std::vector<smt_astt> elements;
49
54 const unsigned int creation_ctx_level;
55
57 ite(smt_solver_baset *ctx, smt_astt cond, smt_astt falseop) const override;
58 smt_astt eq(smt_solver_baset *ctx, smt_astt other) const override;
59 void assign(smt_solver_baset *ctx, smt_astt sym) const override;
63 unsigned int idx,
64 const expr2tc &idx_expr = expr2tc()) const override;
65 smt_astt select(smt_solver_baset *ctx, const expr2tc &idx) const override;
66 smt_astt project(smt_solver_baset *ctx, unsigned int elem) const override;
67
68 void dump() const override
69 {
70 log_debug("tuple-node", "name {}", name);
71 for (auto const &e : elements)
72 e->dump();
73 }
74
75 void make_free(smt_solver_baset *ctx);
77};
78
80{
81 tuple_node_smt_astt ta = dynamic_cast<tuple_node_smt_astt>(a);
82 assert(ta != nullptr && "Tuple AST mismatch");
83 return ta;
84}
85
86#endif
smt_ast(smt_solver_baset *ctx, smt_sortt s)
Definition smt_solver.h:1270
The base SMT-conversion class/interface.
Definition smt_solver.h:170
Definition smt_tuple_node.h:12
Function app representing a tuple sorted value.
Definition smt_tuple_node_ast.h:24
void make_free(smt_solver_baset *ctx)
Definition smt_tuple_node_ast.cpp:16
std::vector< smt_astt > elements
Definition smt_tuple_node_ast.h:48
smt_astt project(smt_solver_baset *ctx, unsigned int elem) const override
Project a member from a structure, or an field-array from a struct array.
Definition smt_tuple_node_ast.cpp:196
void assign(smt_solver_baset *ctx, smt_astt sym) const override
Abstractly produce an assign.
Definition smt_tuple_node_ast.cpp:101
smt_tuple_node_flattener & flat
Definition smt_tuple_node_ast.h:47
smt_astt ite(smt_solver_baset *ctx, smt_astt cond, smt_astt falseop) const override
Definition smt_tuple_node_ast.cpp:63
const std::string name
The symbol prefix of the variables representing this tuples value, as a string (i....
Definition smt_tuple_node_ast.h:45
~tuple_node_smt_ast() override=default
void pre_ite(smt_solver_baset *ctx, smt_astt cond, smt_astt falseop)
const unsigned int creation_ctx_level
Context level this AST was created at.
Definition smt_tuple_node_ast.h:54
smt_astt eq(smt_solver_baset *ctx, smt_astt other) const override
Abstractly produce an equality.
Definition smt_tuple_node_ast.cpp:126
tuple_node_smt_ast(smt_tuple_node_flattener &f, smt_solver_baset *ctx, smt_sortt s, std::string _name)
Primary constructor.
Definition smt_tuple_node_ast.h:30
smt_astt select(smt_solver_baset *ctx, const expr2tc &idx) const override
Select a value from an array, for both normal arrays and tuple arrays.
Definition smt_tuple_node_ast.cpp:187
void dump() const override
Definition smt_tuple_node_ast.h:68
smt_astt update(smt_solver_baset *ctx, smt_astt value, unsigned int idx, const expr2tc &idx_expr=expr2tc()) const override
Abstractly produce an "update", i.e., an array 'with' or tuple 'with'.
Definition smt_tuple_node_ast.cpp:156
Definition toml.hpp:1531
@ other
Definition converter_compare.cpp:887
pthread_cond_t cond
Definition cuda.h:50
irep_container< expr2t > expr2tc
Definition irep2.h:431
#define log_debug(mod, fmt,...)
Definition message.h:104
Definition exception.cpp:51
const smt_ast * smt_astt
Definition smt_ast.h:30
const smt_sort * smt_sortt
Definition smt_sort.h:37
const tuple_node_smt_ast * tuple_node_smt_astt
Definition smt_tuple_node.h:9
tuple_node_smt_astt to_tuple_node_ast(smt_astt a)
Definition smt_tuple_node_ast.h:79