Skip to content

Commit dd66f93

Browse files
committed
Eliminate static variable_sensitivity_object_factoryt
Pass variable_sensitivity_object_factoryt_ptr to abstract_environmenti constructor, which uses it to create the domain objects. Update unit tests now static variable_sensitivity_object_factoryt is gone Remove redundant forward declaration
1 parent 5f7f86c commit dd66f93

File tree

12 files changed

+83
-52
lines changed

12 files changed

+83
-52
lines changed

src/analyses/variable-sensitivity/abstract_enviroment.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ abstract_object_pointert abstract_environmentt::abstract_object_factory(
337337
const abstract_environmentt &environment,
338338
const namespacet &ns) const
339339
{
340-
return variable_sensitivity_object_factoryt::instance().get_abstract_object(
340+
return object_factory->get_abstract_object(
341341
type, top, bottom, e, environment, ns);
342342
}
343343

@@ -527,7 +527,3 @@ abstract_environmentt::gather_statistics(const namespacet &ns) const
527527
}
528528
return statistics;
529529
}
530-
531-
abstract_environmentt::abstract_environmentt() : bottom(true)
532-
{
533-
}

src/analyses/variable-sensitivity/abstract_enviroment.h

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,23 @@
2828
#include <util/sharing_map.h>
2929
#include <util/std_expr.h>
3030

31+
class variable_sensitivity_object_factoryt;
32+
using variable_sensitivity_object_factory_ptrt =
33+
std::shared_ptr<variable_sensitivity_object_factoryt>;
34+
3135
class abstract_environmentt
3236
{
3337
public:
3438
using map_keyt = irep_idt;
35-
abstract_environmentt();
39+
40+
abstract_environmentt() = delete;
41+
42+
abstract_environmentt(
43+
variable_sensitivity_object_factory_ptrt _object_factory)
44+
: bottom(true),
45+
object_factory(_object_factory) {
46+
}
47+
3648
/// These three are really the heart of the method
3749

3850
/// Evaluate the value of an expression relative to the current domain
@@ -248,6 +260,8 @@ class abstract_environmentt
248260
const exprt &e,
249261
const abstract_environmentt &environment,
250262
const namespacet &ns) const;
263+
264+
variable_sensitivity_object_factory_ptrt object_factory;
251265
};
252266

253267
#endif // CPROVER_ANALYSES_VARIABLE_SENSITIVITY_ABSTRACT_ENVIROMENT_H

src/analyses/variable-sensitivity/variable_sensitivity_domain.h

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,15 +71,12 @@
7171
#include <analyses/ai.h>
7272
#include <analyses/variable-sensitivity/abstract_enviroment.h>
7373

74-
class variable_sensitivity_object_factoryt;
75-
using variable_sensitivity_object_factory_ptrt =
76-
std::shared_ptr<variable_sensitivity_object_factoryt>;
77-
7874
class variable_sensitivity_domaint : public ai_domain_baset
7975
{
8076
public:
8177
explicit variable_sensitivity_domaint(
82-
variable_sensitivity_object_factory_ptrt _object_factory) {
78+
variable_sensitivity_object_factory_ptrt _object_factory)
79+
: abstract_state(_object_factory) {
8380
}
8481

8582
/// Compute the abstract transformer for a single instruction

src/analyses/variable-sensitivity/variable_sensitivity_object_factory.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -125,16 +125,16 @@ struct vsd_configt
125125
class variable_sensitivity_object_factoryt
126126
{
127127
public:
128+
static std::shared_ptr<variable_sensitivity_object_factoryt> configured_with(
129+
const vsd_configt &options) {
130+
return std::make_shared<variable_sensitivity_object_factoryt>(options);
131+
}
132+
128133
explicit variable_sensitivity_object_factoryt(const vsd_configt &options)
129134
: configuration(options),
130135
initialized(true) {
131136
}
132137

133-
static variable_sensitivity_object_factoryt &instance()
134-
{
135-
return s_instance;
136-
}
137-
138138
/// Get the appropriate abstract object for the variable under
139139
/// consideration.
140140
///
@@ -167,6 +167,7 @@ class variable_sensitivity_object_factoryt
167167
variable_sensitivity_object_factoryt() : initialized(false)
168168
{
169169
}
170+
170171
static variable_sensitivity_object_factoryt s_instance;
171172
enum ABSTRACT_OBJECT_TYPET
172173
{

src/goto-analyzer/goto_analyzer_parse_options.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -771,16 +771,16 @@ int goto_analyzer_parse_optionst::perform_analysis(const optionst &options)
771771
if(options.get_bool_option("general-analysis"))
772772
{
773773
// TODO : replace with the domain factory infrastructure
774-
try
775-
{
776-
variable_sensitivity_object_factoryt::instance().set_options(
777-
vsd_configt::from_options(options));
778-
}
779-
catch(const invalid_command_line_argument_exceptiont &e)
780-
{
781-
log.error() << e.what() << messaget::eom;
782-
return CPROVER_EXIT_USAGE_ERROR;
783-
}
774+
//try
775+
//{
776+
// variable_sensitivity_object_factoryt::instance().set_options(
777+
// vsd_configt::from_options(options));
778+
//}
779+
//catch(const invalid_command_line_argument_exceptiont &e)
780+
//{
781+
// log.error() << e.what() << messaget::eom;
782+
// return CPROVER_EXIT_USAGE_ERROR;
783+
//}
784784

785785
// Output file factory
786786
const std::string outfile=options.get_option("outfile");

unit/analyses/variable-sensitivity/constant_abstract_value/merge.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <analyses/variable-sensitivity/abstract_enviroment.h>
1010
#include <analyses/variable-sensitivity/abstract_object.h>
1111
#include <analyses/variable-sensitivity/constant_abstract_value.h>
12+
#include <analyses/variable-sensitivity/variable_sensitivity_object_factory.h>
1213
#include <testing-utils/use_catch.h>
1314
#include <typeinfo>
1415
#include <util/arith_tools.h>
@@ -27,7 +28,9 @@ SCENARIO(
2728
const exprt val1 = from_integer(1, integer_typet());
2829
const exprt val2 = from_integer(2, integer_typet());
2930

30-
abstract_environmentt enviroment;
31+
auto object_factory = variable_sensitivity_object_factoryt::configured_with(
32+
vsd_configt::constant_domain());
33+
abstract_environmentt enviroment { object_factory };
3134
enviroment.make_top();
3235
symbol_tablet symbol_table;
3336
namespacet ns(symbol_table);

unit/analyses/variable-sensitivity/constant_array_abstract_object/merge.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,14 +101,13 @@ SCENARIO(
101101
const index_exprt i2 =
102102
index_exprt(nil_exprt(), from_integer(2, integer_typet()));
103103

104-
abstract_environmentt enviroment;
104+
auto object_factory = variable_sensitivity_object_factoryt::configured_with(
105+
vsd_configt::constant_domain());
106+
abstract_environmentt enviroment(object_factory);
105107
enviroment.make_top();
106108
symbol_tablet symbol_table;
107109
namespacet ns(symbol_table);
108110

109-
variable_sensitivity_object_factoryt::instance().set_options(
110-
vsd_configt::constant_domain());
111-
112111
array_utilt util(enviroment, ns);
113112

114113
abstract_object_pointert result;

unit/analyses/variable-sensitivity/eval.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ SCENARIO(
2121
{
2222
GIVEN("An environment with intervals domain")
2323
{
24-
variable_sensitivity_object_factoryt::instance().set_options(
24+
auto object_factory = variable_sensitivity_object_factoryt::configured_with(
2525
vsd_configt::intervals());
26-
abstract_environmentt environment;
26+
abstract_environmentt environment(object_factory);
2727
environment.make_top(); // Domains are bottom on construction
2828

2929
symbol_tablet symbol_table;
@@ -68,7 +68,7 @@ SCENARIO(
6868
// b1 = 0
6969
environment.assign(
7070
b1.symbol_expr(),
71-
variable_sensitivity_object_factoryt::instance().get_abstract_object(
71+
object_factory->get_abstract_object(
7272
number_type,
7373
false,
7474
false,

unit/analyses/variable-sensitivity/full_struct_abstract_object/merge.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,14 +128,13 @@ SCENARIO(
128128
const member_exprt b(nil_exprt(), "b", integer_typet());
129129
const member_exprt c(nil_exprt(), "c", integer_typet());
130130

131-
abstract_environmentt enviroment;
131+
auto object_factory = variable_sensitivity_object_factoryt::configured_with(
132+
vsd_configt::constant_domain());
133+
abstract_environmentt enviroment(object_factory);
132134
enviroment.make_top();
133135
symbol_tablet symbol_table;
134136
namespacet ns(symbol_table);
135137

136-
variable_sensitivity_object_factoryt::instance().set_options(
137-
vsd_configt::constant_domain());
138-
139138
struct_utilt util(enviroment, ns);
140139

141140
abstract_object_pointert result;

unit/analyses/variable-sensitivity/interval_abstract_value/meet.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include <analyses/variable-sensitivity/abstract_enviroment.h>
1212
#include <analyses/variable-sensitivity/abstract_object.h>
1313
#include <analyses/variable-sensitivity/interval_abstract_value.h>
14+
#include <analyses/variable-sensitivity/variable_sensitivity_object_factory.h>
1415

1516
SCENARIO(
1617
"meet_interval_abstract_value",
@@ -42,7 +43,10 @@ SCENARIO(
4243
const auto x_ge_max = binary_relation_exprt(varx, ID_ge, max_value);
4344
const auto x_gt_max = binary_relation_exprt(varx, ID_gt, max_value);
4445

45-
abstract_environmentt enviroment;
46+
auto object_factory = variable_sensitivity_object_factoryt::configured_with(
47+
vsd_configt::intervals());
48+
49+
abstract_environmentt enviroment { object_factory };
4650
enviroment.make_top();
4751
symbol_tablet symbol_table;
4852
namespacet ns(symbol_table);

0 commit comments

Comments
 (0)