Skip to content

Commit 87bb244

Browse files
authored
Merge pull request #4589 from peterschrammel/smt2-conv-inherit
Clean up smt2_conv
2 parents cb2f5ea + 1f75429 commit 87bb244

File tree

2 files changed

+76
-64
lines changed

2 files changed

+76
-64
lines changed

src/solvers/smt2/smt2_conv.cpp

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,70 @@ Author: Daniel Kroening, [email protected]
4242
// General todos
4343
#define SMT2_TODO(S) PRECONDITION_WITH_DIAGNOSTICS(false, "TODO: " S)
4444

45+
smt2_convt::smt2_convt(
46+
const namespacet &_ns,
47+
const std::string &_benchmark,
48+
const std::string &_notes,
49+
const std::string &_logic,
50+
solvert _solver,
51+
std::ostream &_out)
52+
: use_FPA_theory(false),
53+
use_datatypes(false),
54+
use_array_of_bool(false),
55+
emit_set_logic(true),
56+
ns(_ns),
57+
out(_out),
58+
benchmark(_benchmark),
59+
notes(_notes),
60+
logic(_logic),
61+
solver(_solver),
62+
boolbv_width(_ns),
63+
pointer_logic(_ns),
64+
no_boolean_variables(0)
65+
{
66+
// We set some defaults differently
67+
// for some solvers.
68+
69+
switch(solver)
70+
{
71+
case solvert::GENERIC:
72+
break;
73+
74+
case solvert::BOOLECTOR:
75+
break;
76+
77+
case solvert::CPROVER_SMT2:
78+
use_array_of_bool = true;
79+
emit_set_logic = false;
80+
break;
81+
82+
case solvert::CVC3:
83+
break;
84+
85+
case solvert::CVC4:
86+
break;
87+
88+
case solvert::MATHSAT:
89+
break;
90+
91+
case solvert::YICES:
92+
break;
93+
94+
case solvert::Z3:
95+
use_array_of_bool = true;
96+
emit_set_logic = false;
97+
use_datatypes = true;
98+
break;
99+
}
100+
101+
write_header();
102+
}
103+
104+
std::string smt2_convt::decision_procedure_text() const
105+
{
106+
return "SMT2";
107+
}
108+
45109
void smt2_convt::print_assignment(std::ostream &os) const
46110
{
47111
// Boolean stuff

src/solvers/smt2/smt2_conv.h

Lines changed: 12 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class constant_exprt;
3131
class index_exprt;
3232
class member_exprt;
3333

34-
class smt2_convt:public prop_convt
34+
class smt2_convt : public stack_decision_proceduret
3535
{
3636
public:
3737
enum class solvert
@@ -52,77 +52,20 @@ class smt2_convt:public prop_convt
5252
const std::string &_notes,
5353
const std::string &_logic,
5454
solvert _solver,
55-
std::ostream &_out)
56-
: use_FPA_theory(false),
57-
use_datatypes(false),
58-
use_array_of_bool(false),
59-
emit_set_logic(true),
60-
ns(_ns),
61-
out(_out),
62-
benchmark(_benchmark),
63-
notes(_notes),
64-
logic(_logic),
65-
solver(_solver),
66-
boolbv_width(_ns),
67-
pointer_logic(_ns),
68-
no_boolean_variables(0)
69-
{
70-
// We set some defaults differently
71-
// for some solvers.
72-
73-
switch(solver)
74-
{
75-
case solvert::GENERIC:
76-
break;
77-
78-
case solvert::BOOLECTOR:
79-
break;
80-
81-
case solvert::CPROVER_SMT2:
82-
use_array_of_bool = true;
83-
emit_set_logic = false;
84-
break;
85-
86-
case solvert::CVC3:
87-
break;
88-
89-
case solvert::CVC4:
90-
break;
91-
92-
case solvert::MATHSAT:
93-
break;
94-
95-
case solvert::YICES:
96-
break;
97-
98-
case solvert::Z3:
99-
use_array_of_bool=true;
100-
emit_set_logic=false;
101-
use_datatypes=true;
102-
break;
103-
}
104-
105-
write_header();
106-
}
55+
std::ostream &_out);
10756

10857
~smt2_convt() override = default;
109-
resultt dec_solve() override;
11058

11159
bool use_FPA_theory;
11260
bool use_datatypes;
11361
bool use_array_of_bool;
11462
bool emit_set_logic;
11563

11664
exprt handle(const exprt &expr) override;
117-
literalt convert(const exprt &expr) override;
11865
void set_to(const exprt &expr, bool value) override;
11966
exprt get(const exprt &expr) const override;
120-
std::string decision_procedure_text() const override
121-
{
122-
return "SMT2";
123-
}
67+
std::string decision_procedure_text() const override;
12468
void print_assignment(std::ostream &out) const override;
125-
tvt l_get(literalt l) const override;
12669

12770
/// Unimplemented
12871
void push() override;
@@ -133,10 +76,6 @@ class smt2_convt:public prop_convt
13376
/// Currently, only implements a single stack element (no nested contexts)
13477
void pop() override;
13578

136-
void convert_expr(const exprt &);
137-
void convert_type(const typet &);
138-
void convert_literal(const literalt);
139-
14079
std::size_t get_number_of_solver_calls() const override;
14180

14281
protected:
@@ -150,6 +89,8 @@ class smt2_convt:public prop_convt
15089

15190
std::size_t number_of_solver_calls = 0;
15291

92+
resultt dec_solve() override;
93+
15394
void write_header();
15495
void write_footer(std::ostream &);
15596

@@ -183,6 +124,13 @@ class smt2_convt:public prop_convt
183124

184125
std::string convert_identifier(const irep_idt &identifier);
185126

127+
void convert_expr(const exprt &);
128+
void convert_type(const typet &);
129+
void convert_literal(const literalt);
130+
131+
literalt convert(const exprt &expr);
132+
tvt l_get(literalt l) const;
133+
186134
// auxiliary methods
187135
exprt prepare_for_convert_expr(const exprt &expr);
188136
exprt lower_byte_operators(const exprt &expr);

0 commit comments

Comments
 (0)