17
17
18
18
#include " value_set.h"
19
19
20
+ template <class > class value_set_domaint ;
21
+
22
+ // Forwarders for value_set_domaint's calls against value_sett.
23
+ // Specialise these if for some reason you can't just write a member function,
24
+ // or for location numbers, expose the field.
25
+ template <typename VST>
26
+ inline bool value_set_make_union (VST &value_set, const VST &other)
27
+ {
28
+ return value_set.make_union (other);
29
+ }
30
+
31
+ template <typename VST>
32
+ inline void value_set_output (
33
+ const VST &value_set, const namespacet &ns, std::ostream &out)
34
+ {
35
+ value_set.output (ns, out);
36
+ }
37
+
38
+ template <typename VST>
39
+ inline void value_set_clear (VST &value_set)
40
+ {
41
+ value_set.clear ();
42
+ }
43
+
44
+ template <typename VST>
45
+ inline void value_set_set_location_number (VST &value_set, unsigned loc)
46
+ {
47
+ value_set.location_number =loc;
48
+ }
49
+
50
+ template <typename VST>
51
+ inline void value_set_read_reference_set (
52
+ const VST &value_set,
53
+ const exprt &expr,
54
+ value_setst::valuest &dest,
55
+ const namespacet &ns)
56
+ {
57
+ value_set.read_reference_set (expr, dest, ns);
58
+ }
59
+
60
+ template <typename VST>
61
+ inline void value_set_do_end_function (
62
+ VST &value_set, const exprt &return_expr, const namespacet &ns)
63
+ {
64
+ value_set.do_end_function (return_expr, ns);
65
+ }
66
+
67
+ template <typename VST>
68
+ inline void value_set_apply_code (
69
+ VST &value_set, const codet &code, const namespacet &ns)
70
+ {
71
+ value_set.apply_code (code, ns);
72
+ }
73
+
74
+ template <typename VST>
75
+ inline void value_set_guard (
76
+ VST &value_set, const exprt &guard, const namespacet &ns)
77
+ {
78
+ value_set.guard (guard, ns);
79
+ }
80
+
81
+ template <typename VST>
82
+ inline void value_set_do_function_call (
83
+ VST &value_set,
84
+ const irep_idt &function,
85
+ const exprt::operandst &arguments,
86
+ const namespacet &ns)
87
+ {
88
+ value_set.do_function_call (function, arguments, ns);
89
+ }
90
+
20
91
template <class VST >
21
92
class value_set_domaint :public domain_baset
22
93
{
@@ -25,23 +96,23 @@ class value_set_domaint:public domain_baset
25
96
26
97
// overloading
27
98
28
- bool merge (const value_set_domaint &other, locationt to)
99
+ bool merge (const value_set_domaint<VST> &other, locationt to)
29
100
{
30
- return value_set. make_union ( other.value_set );
101
+ return value_set_make_union (value_set, other.value_set );
31
102
}
32
103
33
104
virtual void output (
34
105
const namespacet &ns,
35
106
std::ostream &out) const
36
107
{
37
- value_set. output ( ns, out);
108
+ value_set_output (value_set, ns, out);
38
109
}
39
110
40
111
virtual void initialize (
41
112
const namespacet &ns,
42
113
locationt l)
43
114
{
44
- value_set. clear ( );
115
+ value_set_clear (value_set );
45
116
value_set.location_number =l->location_number ;
46
117
}
47
118
@@ -50,7 +121,7 @@ class value_set_domaint:public domain_baset
50
121
const exprt &expr,
51
122
value_setst::valuest &dest)
52
123
{
53
- value_set. read_reference_set ( expr, dest, ns);
124
+ value_set_read_reference_set (value_set, expr, dest, ns);
54
125
}
55
126
56
127
virtual void transform (
@@ -66,8 +137,8 @@ class value_set_domaint:public domain_baset
66
137
67
138
case END_FUNCTION:
68
139
{
69
- value_set. do_end_function (
70
- static_analysis_baset::get_return_lhs (to_l), ns);
140
+ value_set_do_end_function (
141
+ value_set, static_analysis_baset::get_return_lhs (to_l), ns);
71
142
break ;
72
143
}
73
144
@@ -77,19 +148,20 @@ class value_set_domaint:public domain_baset
77
148
case ASSIGN:
78
149
case DECL:
79
150
case DEAD:
80
- value_set. apply_code ( from_l->code , ns);
151
+ value_set_apply_code (value_set, from_l->code , ns);
81
152
break ;
82
153
83
154
case ASSUME:
84
- value_set. guard ( from_l->guard , ns);
155
+ value_set_guard (value_set, from_l->guard , ns);
85
156
break ;
86
157
87
158
case FUNCTION_CALL:
88
159
{
89
160
const code_function_callt &code=
90
161
to_code_function_call (from_l->code );
91
162
92
- value_set.do_function_call (to_l->function , code.arguments (), ns);
163
+ value_set_do_function_call (
164
+ value_set, to_l->function , code.arguments (), ns);
93
165
}
94
166
break ;
95
167
0 commit comments