Skip to content

Commit dc537b2

Browse files
committed
introduce instructiont::assign_lhs() and assign_rhs()
This mirrors the change in #5861 by replacing the use of code_assignt by directly returning the lhs and rhs expressions. The client code is simplified.
1 parent 99741b3 commit dc537b2

File tree

6 files changed

+51
-29
lines changed

6 files changed

+51
-29
lines changed

src/analyses/constant_propagator.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,8 @@ void constant_propagator_domaint::transform(
164164
}
165165
else if(from->is_assign())
166166
{
167-
const auto &assignment = from->get_assign();
168-
const exprt &lhs=assignment.lhs();
169-
const exprt &rhs=assignment.rhs();
167+
const exprt &lhs = from->assign_lhs();
168+
const exprt &rhs = from->assign_rhs();
170169
assign_rec(values, lhs, rhs, ns, cp, true);
171170
}
172171
else if(from->is_assume())

src/goto-programs/goto_program.cpp

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -299,12 +299,9 @@ std::list<exprt> expressions_read(
299299
}
300300

301301
case ASSIGN:
302-
{
303-
const code_assignt &assignment = instruction.get_assign();
304-
dest.push_back(assignment.rhs());
305-
parse_lhs_read(assignment.lhs(), dest);
302+
dest.push_back(instruction.assign_rhs());
303+
parse_lhs_read(instruction.assign_lhs(), dest);
306304
break;
307-
}
308305

309306
case CATCH:
310307
case THROW:
@@ -343,7 +340,7 @@ std::list<exprt> expressions_written(
343340
break;
344341

345342
case ASSIGN:
346-
dest.push_back(instruction.get_assign().lhs());
343+
dest.push_back(instruction.assign_lhs());
347344
break;
348345

349346
case CATCH:
@@ -935,15 +932,12 @@ void goto_programt::instructiont::transform(
935932

936933
case ASSIGN:
937934
{
938-
auto new_assign_lhs = f(get_assign().lhs());
939-
auto new_assign_rhs = f(get_assign().rhs());
940-
if(new_assign_lhs.has_value() || new_assign_rhs.has_value())
941-
{
942-
auto new_assignment = get_assign();
943-
new_assignment.lhs() = new_assign_lhs.value_or(new_assignment.lhs());
944-
new_assignment.rhs() = new_assign_rhs.value_or(new_assignment.rhs());
945-
set_assign(new_assignment);
946-
}
935+
auto new_assign_lhs = f(assign_lhs());
936+
auto new_assign_rhs = f(assign_rhs());
937+
if(new_assign_lhs.has_value())
938+
assign_lhs() = new_assign_lhs.value();
939+
if(new_assign_rhs.has_value())
940+
assign_rhs() = new_assign_rhs.value();
947941
}
948942
break;
949943

@@ -1032,8 +1026,8 @@ void goto_programt::instructiont::apply(
10321026
break;
10331027

10341028
case ASSIGN:
1035-
f(get_assign().lhs());
1036-
f(get_assign().rhs());
1029+
f(assign_lhs());
1030+
f(assign_rhs());
10371031
break;
10381032

10391033
case DECL:

src/goto-programs/goto_program.h

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,13 +183,43 @@ class goto_programt
183183
codet code;
184184

185185
/// Get the assignment for ASSIGN
186+
DEPRECATED(SINCE(2021, 2, 24, "Use dead_symbol instead"))
186187
const code_assignt &get_assign() const
187188
{
188189
PRECONDITION(is_assign());
189190
return to_code_assign(code);
190191
}
191192

193+
/// Get the lhs of the assignment for ASSIGN
194+
const exprt &assign_lhs() const
195+
{
196+
PRECONDITION(is_assign());
197+
return to_code_assign(code).lhs();
198+
}
199+
200+
/// Get the lhs of the assignment for ASSIGN
201+
exprt &assign_lhs()
202+
{
203+
PRECONDITION(is_assign());
204+
return to_code_assign(code).lhs();
205+
}
206+
207+
/// Get the rhs of the assignment for ASSIGN
208+
const exprt &assign_rhs() const
209+
{
210+
PRECONDITION(is_assign());
211+
return to_code_assign(code).rhs();
212+
}
213+
214+
/// Get the rhs of the assignment for ASSIGN
215+
exprt &assign_rhs()
216+
{
217+
PRECONDITION(is_assign());
218+
return to_code_assign(code).rhs();
219+
}
220+
192221
/// Set the assignment for ASSIGN
222+
DEPRECATED(SINCE(2021, 2, 24, "Use dead_symbol instead"))
193223
void set_assign(code_assignt c)
194224
{
195225
PRECONDITION(is_assign());

src/goto-programs/graphml_witness.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -229,9 +229,9 @@ static bool filter_out(
229229
goto_tracet::stepst::const_iterator &it)
230230
{
231231
if(
232-
it->hidden && (!it->pc->is_assign() ||
233-
it->pc->get_assign().rhs().id() != ID_side_effect ||
234-
it->pc->get_assign().rhs().get(ID_statement) != ID_nondet))
232+
it->hidden &&
233+
(!it->pc->is_assign() || it->pc->assign_rhs().id() != ID_side_effect ||
234+
it->pc->assign_rhs().get(ID_statement) != ID_nondet))
235235
return true;
236236

237237
if(!it->is_assignment() && !it->is_goto() && !it->is_assert())

src/goto-programs/remove_returns.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -310,14 +310,13 @@ bool remove_returnst::restore_returns(
310310
{
311311
if(instruction.is_assign())
312312
{
313-
const auto &assign = instruction.get_assign();
314-
315-
if(assign.lhs().id()!=ID_symbol ||
316-
to_symbol_expr(assign.lhs()).get_identifier()!=rv_name_id)
313+
if(
314+
instruction.assign_lhs().id() != ID_symbol ||
315+
to_symbol_expr(instruction.assign_lhs()).get_identifier() != rv_name_id)
317316
continue;
318317

319318
// replace "fkt#return_value=x;" by "return x;"
320-
const exprt rhs = assign.rhs();
319+
const exprt rhs = instruction.assign_rhs();
321320
instruction = goto_programt::make_return(
322321
code_returnt(rhs), instruction.source_location);
323322
did_something = true;

src/goto-programs/string_abstraction.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ goto_programt::targett string_abstractiont::abstract_assign(
515515
target->set_assign(assign);
516516
}
517517

518-
const typet &type = target->get_assign().lhs().type();
518+
const typet &type = target->assign_lhs().type();
519519

520520
if(type.id() == ID_pointer)
521521
return abstract_pointer_assign(dest, target);

0 commit comments

Comments
 (0)