Skip to content

Commit b646ad9

Browse files
thomasspriggsEnrico Steffinlongo
authored and
Enrico Steffinlongo
committed
Move logic for getting trivial descriptors into descriptor lambda
This improves maintainability by reducing the level of nesting and moving the descriptor building code together.
1 parent 5b11cea commit b646ad9

File tree

1 file changed

+32
-30
lines changed

1 file changed

+32
-30
lines changed

src/solvers/smt2_incremental/smt2_incremental_decision_procedure.cpp

+32-30
Original file line numberDiff line numberDiff line change
@@ -431,50 +431,52 @@ exprt smt2_incremental_decision_proceduret::get(const exprt &expr) const
431431
return {};
432432
return smt_array_theoryt::select(*array, *index);
433433
}
434-
return get_identifier(
435-
expr, expression_handle_identifiers, expression_identifiers);
436-
}();
437-
if(!descriptor)
438-
{
434+
if(
435+
auto identifier_descriptor = get_identifier(
436+
expr, expression_handle_identifiers, expression_identifiers))
437+
{
438+
return identifier_descriptor;
439+
}
439440
if(gather_dependent_expressions(expr).empty())
440441
{
441442
INVARIANT(
442443
objects_are_already_tracked(expr, object_map),
443444
"Objects in expressions being read should already be tracked from "
444445
"point of being set/handled.");
445-
descriptor = ::convert_expr_to_smt(
446+
return ::convert_expr_to_smt(
446447
expr,
447448
object_map,
448449
pointer_sizes_map,
449450
object_size_function.make_application,
450451
is_dynamic_object_function.make_application);
451452
}
452-
else
453+
return {};
454+
}();
455+
if(!descriptor)
456+
{
457+
if(const auto symbol_expr = expr_try_dynamic_cast<symbol_exprt>(expr))
453458
{
454-
if(const auto symbol_expr = expr_try_dynamic_cast<symbol_exprt>(expr))
455-
{
456-
// Note this case is currently expected to be encountered during trace
457-
// generation for -
458-
// * Steps which were removed via --slice-formula.
459-
// * Getting concurrency clock values.
460-
// The below implementation which returns the given expression was chosen
461-
// based on the implementation of `smt2_convt::get` in the non-incremental
462-
// smt2 decision procedure.
463-
log.warning()
464-
<< "`get` attempted for unknown symbol, with identifier - \n"
465-
<< symbol_expr->get_identifier() << messaget::eom;
466-
return expr;
467-
}
468-
exprt copy = expr;
469-
for(auto &op : copy.operands())
470-
{
471-
exprt eval_op = get(op);
472-
if(eval_op.is_nil())
473-
return nil_exprt{};
474-
op = std::move(eval_op);
475-
}
476-
return copy;
459+
// Note this case is currently expected to be encountered during trace
460+
// generation for -
461+
// * Steps which were removed via --slice-formula.
462+
// * Getting concurrency clock values.
463+
// The below implementation which returns the given expression was chosen
464+
// based on the implementation of `smt2_convt::get` in the non-incremental
465+
// smt2 decision procedure.
466+
log.warning()
467+
<< "`get` attempted for unknown symbol, with identifier - \n"
468+
<< symbol_expr->get_identifier() << messaget::eom;
469+
return expr;
470+
}
471+
exprt copy = expr;
472+
for(auto &op : copy.operands())
473+
{
474+
exprt eval_op = get(op);
475+
if(eval_op.is_nil())
476+
return nil_exprt{};
477+
op = std::move(eval_op);
477478
}
479+
return copy;
478480
}
479481
if(const auto array_type = type_try_dynamic_cast<array_typet>(expr.type()))
480482
{

0 commit comments

Comments
 (0)