Skip to content

Commit 9d5497d

Browse files
Merge pull request diffblue#3505 from tautschnig/constructors-for
Add a four-operand constructor to code_fort
2 parents 233a370 + 6927609 commit 9d5497d

File tree

6 files changed

+33
-29
lines changed

6 files changed

+33
-29
lines changed

jbmc/src/java_bytecode/java_bytecode_convert_class.cpp

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -897,25 +897,21 @@ void java_bytecode_convert_classt::add_array_types(symbol_tablet &symbol_table)
897897

898898
code_declt declare_index(index_symexpr);
899899

900-
code_fort copy_loop;
901-
902-
copy_loop.init()=
903-
code_assignt(index_symexpr, from_integer(0, index_symexpr.type()));
904-
copy_loop.cond()=
905-
binary_relation_exprt(index_symexpr, ID_lt, old_length);
906-
907900
side_effect_exprt inc(ID_assign, typet(), location);
908901
inc.operands().resize(2);
909902
inc.op0()=index_symexpr;
910903
inc.op1()=plus_exprt(index_symexpr, from_integer(1, index_symexpr.type()));
911-
copy_loop.iter()=inc;
912904

913905
dereference_exprt old_cell(
914906
plus_exprt(old_data, index_symexpr), old_data.type().subtype());
915907
dereference_exprt new_cell(
916908
plus_exprt(new_data, index_symexpr), new_data.type().subtype());
917-
code_assignt copy_cell(new_cell, old_cell);
918-
copy_loop.body()=copy_cell;
909+
910+
const code_fort copy_loop(
911+
code_assignt(index_symexpr, from_integer(0, index_symexpr.type())),
912+
binary_relation_exprt(index_symexpr, ID_lt, old_length),
913+
std::move(inc),
914+
code_assignt(std::move(new_cell), std::move(old_cell)));
919915

920916
member_exprt new_base_class(
921917
new_array, base_class_component.get_name(), base_class_component.type());

jbmc/src/java_bytecode/remove_java_new.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -266,8 +266,6 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
266266
t_decl->make_decl(decl);
267267
t_decl->source_location = location;
268268

269-
code_fort for_loop;
270-
271269
side_effect_exprt sub_java_new = rhs;
272270
sub_java_new.operands().erase(sub_java_new.operands().begin());
273271

@@ -304,10 +302,11 @@ goto_programt::targett remove_java_newt::lower_java_new_array(
304302
deref_expr, typecast_exprt(init_sym, deref_expr.type()));
305303
for_body.add(std::move(assign_subarray));
306304

307-
for_loop.init() = code_assignt(tmp_i, from_integer(0, tmp_i.type()));
308-
for_loop.cond() = binary_relation_exprt(tmp_i, ID_lt, rhs.op0());
309-
for_loop.iter() = inc;
310-
for_loop.body() = for_body;
305+
const code_fort for_loop(
306+
code_assignt(tmp_i, from_integer(0, tmp_i.type())),
307+
binary_relation_exprt(tmp_i, ID_lt, rhs.op0()),
308+
std::move(inc),
309+
std::move(for_body));
311310

312311
goto_convert(for_loop, symbol_table, tmp, get_message_handler(), ID_java);
313312

src/ansi-c/expr2c.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2801,16 +2801,16 @@ std::string expr2ct::convert_code_for(
28012801
std::string dest=indent_str(indent);
28022802
dest+="for(";
28032803

2804-
if(!src.op0().is_nil())
2805-
dest+=convert(src.op0());
2804+
if(!src.init().is_nil())
2805+
dest += convert(src.init());
28062806
else
28072807
dest+=' ';
28082808
dest+="; ";
2809-
if(!src.op1().is_nil())
2810-
dest+=convert(src.op1());
2809+
if(!src.cond().is_nil())
2810+
dest += convert(src.cond());
28112811
dest+="; ";
2812-
if(!src.op2().is_nil())
2813-
dest+=convert(src.op2());
2812+
if(!src.iter().is_nil())
2813+
dest += convert(src.iter());
28142814

28152815
if(src.body().is_nil())
28162816
dest+=");\n";

src/goto-instrument/goto_program2code.cpp

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -628,13 +628,8 @@ goto_programt::const_targett goto_program2codet::convert_goto_while(
628628
if(w.body().has_operands() &&
629629
to_code(w.body().operands().back()).get_statement()==ID_assign)
630630
{
631-
code_fort f;
631+
code_fort f(nil_exprt(), w.cond(), w.body().operands().back(), codet());
632632

633-
f.init().make_nil();
634-
635-
f.cond()=w.cond();
636-
637-
f.iter()=w.body().operands().back();
638633
w.body().operands().pop_back();
639634
f.iter().id(ID_side_effect);
640635

src/goto-programs/goto_convert.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -952,7 +952,7 @@ void goto_convertt::convert_for(
952952
// do the x label
953953
goto_programt tmp_x;
954954

955-
if(code.op2().is_nil())
955+
if(code.iter().is_nil())
956956
{
957957
tmp_x.add_instruction(SKIP);
958958
tmp_x.instructions.back().source_location=code.source_location();

src/util/std_code.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -882,6 +882,20 @@ class code_fort:public codet
882882
operands().resize(4);
883883
}
884884

885+
/// A statement describing a for loop with initializer \p _init, loop
886+
/// condition \p _cond, increment \p _iter, and body \p _body.
887+
code_fort(
888+
const exprt &_init,
889+
const exprt &_cond,
890+
const exprt &_iter,
891+
const codet &_body)
892+
: codet(ID_for)
893+
{
894+
reserve_operands(4);
895+
add_to_operands(_init, _cond, _iter);
896+
add_to_operands(_body);
897+
}
898+
885899
// nil or a statement
886900
const exprt &init() const
887901
{

0 commit comments

Comments
 (0)