@@ -61,6 +61,42 @@ static bool should_use_local_definition_for(const exprt &expr)
6161 return false ;
6262}
6363
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+
64100exprt value_set_dereferencet::dereference (
65101 const exprt &pointer,
66102 bool display_points_to_sets)
@@ -106,46 +142,10 @@ exprt value_set_dereferencet::dereference(
106142 // type of the object
107143 const typet &type=pointer.type ().subtype ();
108144
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-
122145 // collect objects the pointer may point to
123146 const std::vector<exprt> points_to_set =
124147 dereference_callback.get_value_set (pointer);
125148
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-
149149 // get the values of these
150150 const std::vector<exprt> retained_values =
151151 make_range (points_to_set).filter ([&](const exprt &value) {
@@ -167,29 +167,6 @@ exprt value_set_dereferencet::dereference(
167167 compare_against_pointer = fresh_binder.symbol_expr ();
168168 }
169169
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-
193170 std::list<valuet> values =
194171 make_range (retained_values).map ([&](const exprt &value) {
195172 return build_reference_to (value, compare_against_pointer, ns);
@@ -274,19 +251,10 @@ exprt value_set_dereferencet::dereference(
274251
275252 if (display_points_to_sets)
276253 {
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);
282256 }
283257
284- #ifdef DEBUG
285- std::cout << " value_set_derefencet::dereference value=" << format (value)
286- << ' \n '
287- << std::flush;
288- #endif
289-
290258 return value;
291259}
292260
0 commit comments