@@ -29,6 +29,7 @@ Author: Daniel Kroening, kroening@kroening.com
2929#include < util/options.h>
3030#include < util/pointer_offset_size.h>
3131#include < util/pointer_predicates.h>
32+ #include < util/range.h>
3233#include < util/simplify_expr.h>
3334#include < util/ssa_expr.h>
3435
@@ -97,33 +98,28 @@ exprt value_set_dereferencet::dereference(const exprt &pointer)
9798 // type of the object
9899 const typet &type=pointer.type ().subtype ();
99100
100- #if 0
101- std::cout << "DEREF: " << format(pointer) << '\n';
101+ #ifdef DEBUG
102+ std::cout << " value_set_dereferencet::dereference pointer=" << format (pointer)
103+ << ' \n ' ;
102104#endif
103105
104106 // collect objects the pointer may point to
105107 value_setst::valuest points_to_set;
106108
107109 dereference_callback.get_value_set (pointer, points_to_set);
108110
109- #if 0
110- for(value_setst::valuest::const_iterator
111- it=points_to_set.begin();
112- it!=points_to_set.end();
113- it++)
114- std::cout << "P: " << format(*it) << '\n';
111+ #ifdef DEBUG
112+ std::cout << " value_set_dereferencet::dereference points_to_set={" ;
113+ for (auto p : points_to_set)
114+ std::cout << format (p) << " ; " ;
115+ std::cout << " }\n " << std::flush;
115116#endif
116117
117118 // get the values of these
118-
119- std::vector<exprt> retained_values;
120- for (const auto &value : points_to_set)
121- {
122- if (!should_ignore_value (value, exclude_null_derefs, language_mode))
123- retained_values.push_back (value);
124- }
125-
126- std::list<valuet> values;
119+ const std::vector<exprt> retained_values =
120+ make_range (points_to_set).filter ([&](const exprt &value) {
121+ return !should_ignore_value (value, exclude_null_derefs, language_mode);
122+ });
127123
128124 exprt compare_against_pointer = pointer;
129125
@@ -140,15 +136,17 @@ exprt value_set_dereferencet::dereference(const exprt &pointer)
140136 compare_against_pointer = fresh_binder.symbol_expr ();
141137 }
142138
139+ #ifdef DEBUG
140+ std::cout << " value_set_dereferencet::dereference retained_values={" ;
143141 for (const auto &value : retained_values)
144- {
145- values.push_back (build_reference_to (value, compare_against_pointer, ns));
146- #if 0
147- std::cout << "V: " << format(value.pointer_guard) << " --> ";
148- std::cout << format(value.value);
149- std::cout << '\n';
142+ std::cout << format (value) << " ; " ;
143+ std::cout << " }\n " << std::flush;
150144#endif
151- }
145+
146+ std::list<valuet> values =
147+ make_range (retained_values).map ([&](const exprt &value) {
148+ return build_reference_to (value, compare_against_pointer, ns);
149+ });
152150
153151 // can this fail?
154152 bool may_fail;
@@ -227,8 +225,10 @@ exprt value_set_dereferencet::dereference(const exprt &pointer)
227225 if (compare_against_pointer != pointer)
228226 value = let_exprt (to_symbol_expr (compare_against_pointer), pointer, value);
229227
230- #if 0
231- std::cout << "R: " << format(value) << "\n\n";
228+ #ifdef DEBUG
229+ std::cout << " value_set_derefencet::dereference value=" << format (value)
230+ << ' \n '
231+ << std::flush;
232232#endif
233233
234234 return value;
0 commit comments