Skip to content

Commit 7072fd0

Browse files
committed
Solver factory: all solvers are stack_decision_proceduret
There is no need for both `get_decision_procedure` and `get_stack_decision_procedure` where the latter uses `dynamic_cast`.
1 parent d635850 commit 7072fd0

7 files changed

+22
-41
lines changed

src/goto-checker/goto_symex_property_decider.cpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -114,18 +114,12 @@ decision_proceduret::resultt goto_symex_property_decidert::solve()
114114
return solver->decision_procedure()();
115115
}
116116

117-
decision_proceduret &
117+
stack_decision_proceduret &
118118
goto_symex_property_decidert::get_decision_procedure() const
119119
{
120120
return solver->decision_procedure();
121121
}
122122

123-
stack_decision_proceduret &
124-
goto_symex_property_decidert::get_stack_decision_procedure() const
125-
{
126-
return solver->stack_decision_procedure();
127-
}
128-
129123
symex_target_equationt &goto_symex_property_decidert::get_equation() const
130124
{
131125
return equation;

src/goto-checker/goto_symex_property_decider.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,7 @@ class goto_symex_property_decidert
4545
decision_proceduret::resultt solve();
4646

4747
/// Returns the solver instance
48-
decision_proceduret &get_decision_procedure() const;
49-
50-
/// Returns the solver instance
51-
stack_decision_proceduret &get_stack_decision_procedure() const;
48+
stack_decision_proceduret &get_decision_procedure() const;
5249

5350
/// Return the equation associated with this instance
5451
symex_target_equationt &get_equation() const;

src/goto-checker/multi_path_symex_checker.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ goto_tracet multi_path_symex_checkert::build_shortest_trace() const
113113
{
114114
// NOLINTNEXTLINE(whitespace/braces)
115115
counterexample_beautificationt{ui_message_handler}(
116-
dynamic_cast<boolbvt &>(property_decider.get_stack_decision_procedure()),
116+
dynamic_cast<boolbvt &>(property_decider.get_decision_procedure()),
117117
equation);
118118
}
119119

@@ -161,7 +161,7 @@ multi_path_symex_checkert::localize_fault(const irep_idt &property_id) const
161161
options,
162162
ui_message_handler,
163163
equation,
164-
property_decider.get_stack_decision_procedure());
164+
property_decider.get_decision_procedure());
165165

166166
return fault_localizer(property_id);
167167
}

src/goto-checker/single_loop_incremental_symex_checker.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ single_loop_incremental_symex_checkert::single_loop_incremental_symex_checkert(
4444

4545
// Freeze all symbols if we are using a prop_conv_solvert
4646
prop_conv_solvert *prop_conv_solver = dynamic_cast<prop_conv_solvert *>(
47-
&property_decider.get_stack_decision_procedure());
47+
&property_decider.get_decision_procedure());
4848
if(prop_conv_solver != nullptr)
4949
prop_conv_solver->set_all_frozen();
5050
}
@@ -114,7 +114,7 @@ operator()(propertiest &properties)
114114
properties);
115115

116116
// We convert the assertions in a new context.
117-
property_decider.get_stack_decision_procedure().push();
117+
property_decider.get_decision_procedure().push();
118118
equation.convert_assertions(
119119
property_decider.get_decision_procedure(), false);
120120
property_decider.convert_goals();
@@ -154,7 +154,7 @@ operator()(propertiest &properties)
154154

155155
// Nothing else to do with the current set of assertions.
156156
// Let's pop them.
157-
property_decider.get_stack_decision_procedure().pop();
157+
property_decider.get_decision_procedure().pop();
158158
}
159159

160160
// Now we are finally done.
@@ -207,7 +207,7 @@ goto_tracet single_loop_incremental_symex_checkert::build_shortest_trace() const
207207
{
208208
// NOLINTNEXTLINE(whitespace/braces)
209209
counterexample_beautificationt{ui_message_handler}(
210-
dynamic_cast<boolbvt &>(property_decider.get_stack_decision_procedure()),
210+
dynamic_cast<boolbvt &>(property_decider.get_decision_procedure()),
211211
equation);
212212
}
213213

src/goto-checker/single_path_symex_checker.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ goto_tracet single_path_symex_checkert::build_shortest_trace() const
144144
{
145145
// NOLINTNEXTLINE(whitespace/braces)
146146
counterexample_beautificationt{ui_message_handler}(
147-
dynamic_cast<boolbvt &>(property_decider->get_stack_decision_procedure()),
147+
dynamic_cast<boolbvt &>(property_decider->get_decision_procedure()),
148148
property_decider->get_equation());
149149
}
150150

src/goto-checker/solver_factory.cpp

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -46,41 +46,31 @@ solver_factoryt::solver_factoryt(
4646
{
4747
}
4848

49-
solver_factoryt::solvert::solvert(std::unique_ptr<decision_proceduret> p)
49+
solver_factoryt::solvert::solvert(std::unique_ptr<stack_decision_proceduret> p)
5050
: decision_procedure_ptr(std::move(p))
5151
{
5252
}
5353

5454
solver_factoryt::solvert::solvert(
55-
std::unique_ptr<decision_proceduret> p1,
55+
std::unique_ptr<stack_decision_proceduret> p1,
5656
std::unique_ptr<propt> p2)
5757
: prop_ptr(std::move(p2)), decision_procedure_ptr(std::move(p1))
5858
{
5959
}
6060

6161
solver_factoryt::solvert::solvert(
62-
std::unique_ptr<decision_proceduret> p1,
62+
std::unique_ptr<stack_decision_proceduret> p1,
6363
std::unique_ptr<std::ofstream> p2)
6464
: ofstream_ptr(std::move(p2)), decision_procedure_ptr(std::move(p1))
6565
{
6666
}
6767

68-
decision_proceduret &solver_factoryt::solvert::decision_procedure() const
68+
stack_decision_proceduret &solver_factoryt::solvert::decision_procedure() const
6969
{
7070
PRECONDITION(decision_procedure_ptr != nullptr);
7171
return *decision_procedure_ptr;
7272
}
7373

74-
stack_decision_proceduret &
75-
solver_factoryt::solvert::stack_decision_procedure() const
76-
{
77-
PRECONDITION(decision_procedure_ptr != nullptr);
78-
stack_decision_proceduret *solver =
79-
dynamic_cast<stack_decision_proceduret *>(&*decision_procedure_ptr);
80-
INVARIANT(solver != nullptr, "stack decision procedure required");
81-
return *solver;
82-
}
83-
8474
void solver_factoryt::set_decision_procedure_time_limit(
8575
decision_proceduret &decision_procedure)
8676
{
@@ -105,7 +95,7 @@ void solver_factoryt::set_decision_procedure_time_limit(
10595
}
10696

10797
void solver_factoryt::solvert::set_decision_procedure(
108-
std::unique_ptr<decision_proceduret> p)
98+
std::unique_ptr<stack_decision_proceduret> p)
10999
{
110100
decision_procedure_ptr = std::move(p);
111101
}

src/goto-checker/solver_factory.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ class cmdlinet;
2121
class message_handlert;
2222
class namespacet;
2323
class optionst;
24-
class stack_decision_proceduret;
2524

2625
class solver_factoryt final
2726
{
@@ -38,23 +37,24 @@ class solver_factoryt final
3837
class solvert final
3938
{
4039
public:
41-
explicit solvert(std::unique_ptr<decision_proceduret> p);
42-
solvert(std::unique_ptr<decision_proceduret> p1, std::unique_ptr<propt> p2);
40+
explicit solvert(std::unique_ptr<stack_decision_proceduret> p);
4341
solvert(
44-
std::unique_ptr<decision_proceduret> p1,
42+
std::unique_ptr<stack_decision_proceduret> p1,
43+
std::unique_ptr<propt> p2);
44+
solvert(
45+
std::unique_ptr<stack_decision_proceduret> p1,
4546
std::unique_ptr<std::ofstream> p2);
4647

47-
decision_proceduret &decision_procedure() const;
48-
stack_decision_proceduret &stack_decision_procedure() const;
48+
stack_decision_proceduret &decision_procedure() const;
4949

50-
void set_decision_procedure(std::unique_ptr<decision_proceduret> p);
50+
void set_decision_procedure(std::unique_ptr<stack_decision_proceduret> p);
5151
void set_prop(std::unique_ptr<propt> p);
5252
void set_ofstream(std::unique_ptr<std::ofstream> p);
5353

5454
// the objects are deleted in the opposite order they appear below
5555
std::unique_ptr<std::ofstream> ofstream_ptr;
5656
std::unique_ptr<propt> prop_ptr;
57-
std::unique_ptr<decision_proceduret> decision_procedure_ptr;
57+
std::unique_ptr<stack_decision_proceduret> decision_procedure_ptr;
5858
};
5959

6060
/// Returns a solvert object

0 commit comments

Comments
 (0)