Skip to content

Commit 305ede8

Browse files
Extract convert_iinc function
1 parent 61d03da commit 305ede8

File tree

2 files changed

+34
-27
lines changed

2 files changed

+34
-27
lines changed

jbmc/src/java_bytecode/java_bytecode_convert_method.cpp

+29-22
Original file line numberDiff line numberDiff line change
@@ -1614,28 +1614,7 @@ codet java_bytecode_convert_methodt::convert_instructions(
16141614
}
16151615
else if(statement=="iinc")
16161616
{
1617-
code_blockt block;
1618-
block.add_source_location()=i_it->source_location;
1619-
// search variable on stack
1620-
const exprt &locvar=variable(arg0, 'i', i_it->address, NO_CAST);
1621-
save_stack_entries(
1622-
"stack_iinc",
1623-
java_int_type(),
1624-
block,
1625-
bytecode_write_typet::VARIABLE,
1626-
to_symbol_expr(locvar).get_identifier());
1627-
1628-
code_assignt code_assign;
1629-
code_assign.lhs()=
1630-
variable(arg0, 'i', i_it->address, NO_CAST);
1631-
exprt arg1_int_type=arg1;
1632-
if(arg1.type()!=java_int_type())
1633-
arg1_int_type.make_typecast(java_int_type());
1634-
code_assign.rhs()=plus_exprt(
1635-
variable(arg0, 'i', i_it->address, CAST_AS_NEEDED),
1636-
arg1_int_type);
1637-
block.copy_to_operands(code_assign);
1638-
c=block;
1617+
c = convert_iinc(arg0, arg1, i_it->source_location, i_it->address);
16391618
}
16401619
else if(statement==patternt("?xor"))
16411620
{
@@ -2543,6 +2522,34 @@ codet java_bytecode_convert_methodt::convert_instructions(
25432522
return code;
25442523
}
25452524

2525+
codet java_bytecode_convert_methodt::convert_iinc(
2526+
const exprt &arg0,
2527+
const exprt &arg1,
2528+
const source_locationt &location,
2529+
const unsigned address)
2530+
{
2531+
code_blockt block;
2532+
block.add_source_location() = location;
2533+
// search variable on stack
2534+
const exprt &locvar = variable(arg0, 'i', address, NO_CAST);
2535+
save_stack_entries(
2536+
"stack_iinc",
2537+
java_int_type(),
2538+
block,
2539+
bytecode_write_typet::VARIABLE,
2540+
to_symbol_expr(locvar).get_identifier());
2541+
2542+
code_assignt code_assign;
2543+
code_assign.lhs() = variable(arg0, 'i', address, NO_CAST);
2544+
exprt arg1_int_type = arg1;
2545+
if(arg1.type() != java_int_type())
2546+
arg1_int_type.make_typecast(java_int_type());
2547+
code_assign.rhs() =
2548+
plus_exprt(variable(arg0, 'i', address, CAST_AS_NEEDED), arg1_int_type);
2549+
block.copy_to_operands(code_assign);
2550+
return block;
2551+
}
2552+
25462553
codet java_bytecode_convert_methodt::convert_ifnull(
25472554
const java_bytecode_convert_methodt::address_mapt &address_map,
25482555
const exprt::operandst &op,

jbmc/src/java_bytecode/java_bytecode_convert_method_class.h

+5-5
Original file line numberDiff line numberDiff line change
@@ -362,10 +362,10 @@ class java_bytecode_convert_methodt:public messaget
362362
const mp_integer &number,
363363
const source_locationt &location) const;
364364

365-
codet convert_ifnull(
366-
java_bytecode_convert_methodt::address_mapt &address_map,
367-
const exprt::operandst &op,
368-
const mp_integer &number,
369-
const source_locationt &location);
365+
codet convert_iinc(
366+
const exprt &arg0,
367+
const exprt &arg1,
368+
const source_locationt &location,
369+
unsigned address);
370370
};
371371
#endif

0 commit comments

Comments
 (0)