@@ -61,6 +61,42 @@ static bool should_use_local_definition_for(const exprt &expr)
61
61
return false ;
62
62
}
63
63
64
+ static json_objectt value_set_dereference_stats_to_json (
65
+ const exprt &pointer,
66
+ const std::vector<exprt> &points_to_set,
67
+ const std::vector<exprt> &retained_values,
68
+ const exprt &value)
69
+ {
70
+ json_objectt json_result;
71
+ json_result[" Pointer" ] = json_stringt{format_to_string (pointer)};
72
+ json_result[" PointsToSetSize" ] =
73
+ json_numbert{std::to_string (points_to_set.size ())};
74
+
75
+ json_arrayt points_to_set_json;
76
+ for (const auto &object : points_to_set)
77
+ {
78
+ points_to_set_json.push_back (json_stringt{format_to_string (object)});
79
+ }
80
+
81
+ json_result[" PointsToSet" ] = points_to_set_json;
82
+
83
+ json_result[" RetainedValuesSetSize" ] =
84
+ json_numbert{std::to_string (points_to_set.size ())};
85
+
86
+ json_arrayt retained_values_set_json;
87
+ for (auto &retained_value : retained_values)
88
+ {
89
+ retained_values_set_json.push_back (
90
+ json_stringt{format_to_string (retained_value)});
91
+ }
92
+
93
+ json_result[" RetainedValuesSet" ] = retained_values_set_json;
94
+
95
+ json_result[" Value" ] = json_stringt{format_to_string (value)};
96
+
97
+ return json_result;
98
+ }
99
+
64
100
exprt value_set_dereferencet::dereference (
65
101
const exprt &pointer,
66
102
bool display_points_to_sets)
@@ -106,46 +142,10 @@ exprt value_set_dereferencet::dereference(
106
142
// type of the object
107
143
const typet &type=pointer.type ().subtype ();
108
144
109
- json_objectt json_result;
110
- if (display_points_to_sets)
111
- {
112
- std::stringstream ss;
113
- ss << format (pointer);
114
- json_result[" Pointer" ] = json_stringt (ss.str ());
115
- }
116
-
117
- #ifdef DEBUG
118
- std::cout << " value_set_dereferencet::dereference pointer=" << format (pointer)
119
- << ' \n ' ;
120
- #endif
121
-
122
145
// collect objects the pointer may point to
123
146
const std::vector<exprt> points_to_set =
124
147
dereference_callback.get_value_set (pointer);
125
148
126
- if (display_points_to_sets)
127
- {
128
- json_result[" PointsToSetSize" ] =
129
- json_numbert (std::to_string (points_to_set.size ()));
130
-
131
- json_arrayt points_to_set_json;
132
- for (auto p : points_to_set)
133
- {
134
- std::stringstream ss;
135
- ss << format (p);
136
- points_to_set_json.push_back (json_stringt (ss.str ()));
137
- }
138
-
139
- json_result[" PointsToSet" ] = points_to_set_json;
140
- }
141
-
142
- #ifdef DEBUG
143
- std::cout << " value_set_dereferencet::dereference points_to_set={" ;
144
- for (auto p : points_to_set)
145
- std::cout << format (p) << " ; " ;
146
- std::cout << " }\n " << std::flush;
147
- #endif
148
-
149
149
// get the values of these
150
150
const std::vector<exprt> retained_values =
151
151
make_range (points_to_set).filter ([&](const exprt &value) {
@@ -167,29 +167,6 @@ exprt value_set_dereferencet::dereference(
167
167
compare_against_pointer = fresh_binder.symbol_expr ();
168
168
}
169
169
170
- if (display_points_to_sets)
171
- {
172
- json_result[" RetainedValuesSetSize" ] =
173
- json_numbert (std::to_string (points_to_set.size ()));
174
-
175
- json_arrayt retained_values_set_json;
176
- for (auto &value : retained_values)
177
- {
178
- std::stringstream ss;
179
- ss << format (value);
180
- retained_values_set_json.push_back (json_stringt (ss.str ()));
181
- }
182
-
183
- json_result[" RetainedValuesSet" ] = retained_values_set_json;
184
- }
185
-
186
- #ifdef DEBUG
187
- std::cout << " value_set_dereferencet::dereference retained_values={" ;
188
- for (const auto &value : retained_values)
189
- std::cout << format (value) << " ; " ;
190
- std::cout << " }\n " << std::flush;
191
- #endif
192
-
193
170
std::list<valuet> values =
194
171
make_range (retained_values).map ([&](const exprt &value) {
195
172
return build_reference_to (value, compare_against_pointer, ns);
@@ -274,19 +251,10 @@ exprt value_set_dereferencet::dereference(
274
251
275
252
if (display_points_to_sets)
276
253
{
277
- std::stringstream ss;
278
- ss << format (value);
279
- json_result[" Value" ] = json_stringt (ss.str ());
280
-
281
- log.status () << json_result;
254
+ log.status () << value_set_dereference_stats_to_json (
255
+ pointer, points_to_set, retained_values, value);
282
256
}
283
257
284
- #ifdef DEBUG
285
- std::cout << " value_set_derefencet::dereference value=" << format (value)
286
- << ' \n '
287
- << std::flush;
288
- #endif
289
-
290
258
return value;
291
259
}
292
260
0 commit comments