29
29
#include < util/options.h>
30
30
#include < util/pointer_offset_size.h>
31
31
#include < util/pointer_predicates.h>
32
+ #include < util/range.h>
32
33
#include < util/simplify_expr.h>
33
34
#include < util/ssa_expr.h>
34
35
@@ -97,33 +98,28 @@ exprt value_set_dereferencet::dereference(const exprt &pointer)
97
98
// type of the object
98
99
const typet &type=pointer.type ().subtype ();
99
100
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 ' ;
102
104
#endif
103
105
104
106
// collect objects the pointer may point to
105
107
value_setst::valuest points_to_set;
106
108
107
109
dereference_callback.get_value_set (pointer, points_to_set);
108
110
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;
115
116
#endif
116
117
117
118
// 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
+ });
127
123
128
124
exprt compare_against_pointer = pointer;
129
125
@@ -140,15 +136,17 @@ exprt value_set_dereferencet::dereference(const exprt &pointer)
140
136
compare_against_pointer = fresh_binder.symbol_expr ();
141
137
}
142
138
139
+ #ifdef DEBUG
140
+ std::cout << " value_set_dereferencet::dereference retained_values={" ;
143
141
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;
150
144
#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
+ });
152
150
153
151
// can this fail?
154
152
bool may_fail;
@@ -227,8 +225,10 @@ exprt value_set_dereferencet::dereference(const exprt &pointer)
227
225
if (compare_against_pointer != pointer)
228
226
value = let_exprt (to_symbol_expr (compare_against_pointer), pointer, value);
229
227
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;
232
232
#endif
233
233
234
234
return value;
0 commit comments