Skip to content

Commit eafa13e

Browse files
committed
Strip out unnecessary casts when calling unwrap_context()
1 parent 055a475 commit eafa13e

File tree

5 files changed

+12
-49
lines changed

5 files changed

+12
-49
lines changed

src/analyses/variable-sensitivity/abstract_environment.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -520,12 +520,8 @@ std::vector<abstract_object_pointert> eval_operands(
520520
///////////
521521
abstract_value_pointert as_value(const abstract_object_pointert &obj)
522522
{
523-
auto context_value =
524-
std::dynamic_pointer_cast<const context_abstract_objectt>(obj);
525-
526-
return context_value
527-
? as_value(context_value->unwrap_context())
528-
: std::dynamic_pointer_cast<const abstract_value_objectt>(obj);
523+
return std::dynamic_pointer_cast<const abstract_value_objectt>(
524+
obj->unwrap_context());
529525
}
530526

531527
bool is_value(const abstract_object_pointert &obj)

src/analyses/variable-sensitivity/value_set_abstract_object.cpp

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -250,10 +250,6 @@ abstract_object_pointert value_set_abstract_objectt::resolve_values(
250250
return std::make_shared<interval_abstract_valuet>(
251251
unwrapped_values.to_interval());
252252
}
253-
//if(unwrapped_values.size() == 1)
254-
//{
255-
// return (*unwrapped_values.begin());
256-
//}
257253

258254
auto result =
259255
std::dynamic_pointer_cast<value_set_abstract_objectt>(mutable_clone());
@@ -307,23 +303,13 @@ void value_set_abstract_objectt::output(
307303
}
308304
}
309305

310-
static abstract_object_pointert
311-
maybe_unwrap_context(const abstract_object_pointert &maybe_wrapped)
312-
{
313-
auto const &context_value =
314-
std::dynamic_pointer_cast<const context_abstract_objectt>(maybe_wrapped);
315-
316-
return context_value ? context_value->unwrap_context() : maybe_wrapped;
317-
}
318-
319306
static abstract_object_sett
320307
unwrap_and_extract_values(const abstract_object_sett &values)
321308
{
322309
abstract_object_sett unwrapped_values;
323310
for(auto const &value : values)
324311
{
325-
unwrapped_values.insert(
326-
maybe_extract_single_value(maybe_unwrap_context(value)));
312+
unwrapped_values.insert(maybe_extract_single_value(value));
327313
}
328314

329315
return unwrapped_values;
@@ -332,8 +318,8 @@ unwrap_and_extract_values(const abstract_object_sett &values)
332318
static abstract_object_pointert
333319
maybe_extract_single_value(const abstract_object_pointert &maybe_singleton)
334320
{
335-
auto const &value_as_set =
336-
std::dynamic_pointer_cast<const value_set_tag>(maybe_singleton);
321+
auto const &value_as_set = std::dynamic_pointer_cast<const value_set_tag>(
322+
maybe_singleton->unwrap_context());
337323
if(value_as_set)
338324
{
339325
PRECONDITION(value_as_set->get_values().size() == 1);

src/analyses/variable-sensitivity/value_set_pointer_abstract_object.cpp

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,6 @@ unwrap_and_extract_values(const abstract_object_sett &values);
2323
static abstract_object_pointert
2424
maybe_extract_single_value(const abstract_object_pointert &maybe_singleton);
2525

26-
/// Helper for converting context objects into its abstract-value children
27-
/// \p maybe_wrapped: either an abstract value (or a set of those) or one
28-
/// wrapped in a context
29-
/// \return an abstract value without context (though it might be as set)
30-
static abstract_object_pointert
31-
maybe_unwrap_context(const abstract_object_pointert &maybe_wrapped);
32-
3326
/// Recursively construct a combination \p sub_con from \p super_con and once
3427
/// constructed call \p f.
3528
/// \param super_con: vector of some containers storing the values
@@ -215,8 +208,7 @@ unwrap_and_extract_values(const abstract_object_sett &values)
215208
abstract_object_sett unwrapped_values;
216209
for(auto const &value : values)
217210
{
218-
unwrapped_values.insert(
219-
maybe_extract_single_value(maybe_unwrap_context(value)));
211+
unwrapped_values.insert(maybe_extract_single_value(value));
220212
}
221213

222214
return unwrapped_values;
@@ -225,8 +217,8 @@ unwrap_and_extract_values(const abstract_object_sett &values)
225217
abstract_object_pointert
226218
maybe_extract_single_value(const abstract_object_pointert &maybe_singleton)
227219
{
228-
auto const &value_as_set =
229-
std::dynamic_pointer_cast<const value_set_tag>(maybe_singleton);
220+
auto const &value_as_set = std::dynamic_pointer_cast<const value_set_tag>(
221+
maybe_singleton->unwrap_context());
230222
if(value_as_set)
231223
{
232224
PRECONDITION(value_as_set->get_values().size() == 1);
@@ -238,12 +230,3 @@ maybe_extract_single_value(const abstract_object_pointert &maybe_singleton)
238230
else
239231
return maybe_singleton;
240232
}
241-
242-
abstract_object_pointert
243-
maybe_unwrap_context(const abstract_object_pointert &maybe_wrapped)
244-
{
245-
auto const &context_value =
246-
std::dynamic_pointer_cast<const context_abstract_objectt>(maybe_wrapped);
247-
248-
return context_value ? context_value->unwrap_context() : maybe_wrapped;
249-
}

unit/analyses/variable-sensitivity/eval-member-access.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,8 @@ exprt fetch_element(
110110
if(object->is_top()) // oh!
111111
return object->to_constant();
112112

113-
const auto unwrapped = object->unwrap_context();
114-
auto value = std::dynamic_pointer_cast<const abstract_objectt>(unwrapped);
113+
auto value =
114+
std::dynamic_pointer_cast<const abstract_objectt>(object->unwrap_context());
115115
REQUIRE(value);
116116
return value->to_constant();
117117
}

unit/analyses/variable-sensitivity/eval.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,9 @@ SCENARIO(
5050
std::dynamic_pointer_cast<const context_abstract_objectt>(result));
5151
REQUIRE_FALSE(result->is_top());
5252
REQUIRE_FALSE(result->is_bottom());
53-
const auto unwrapped =
54-
std::dynamic_pointer_cast<const context_abstract_objectt>(result)
55-
->unwrap_context();
5653
auto result_as_interval =
57-
std::dynamic_pointer_cast<const interval_abstract_valuet>(unwrapped);
54+
std::dynamic_pointer_cast<const interval_abstract_valuet>(
55+
result->unwrap_context());
5856
REQUIRE(result_as_interval);
5957
REQUIRE(
6058
result_as_interval->to_interval().get_lower() ==

0 commit comments

Comments
 (0)