@@ -210,12 +210,8 @@ const exprt java_bytecode_convert_methodt::variable(
210210 size_t address,
211211 java_bytecode_convert_methodt::variable_cast_argumentt do_cast)
212212{
213- mp_integer number;
214- bool ret=to_integer (to_constant_expr (arg), number);
215- CHECK_RETURN (!ret);
216-
217- std::size_t number_int=integer2size_t (number);
218213 typet t=java_type_from_char (type_char);
214+ const std::size_t number_int = numeric_cast_v<std::size_t >(arg);
219215 variablest &var_list=variables[number_int];
220216
221217 // search variable in list for correct frame / address if necessary
@@ -1331,19 +1327,15 @@ code_blockt java_bytecode_convert_methodt::convert_instructions(
13311327 else if (statement==" goto" || statement==" goto_w" )
13321328 {
13331329 PRECONDITION (op.empty () && results.empty ());
1334- mp_integer number;
1335- bool ret=to_integer (to_constant_expr (arg0), number);
1336- INVARIANT (!ret, " goto argument should be an integer" );
1330+ const mp_integer number = numeric_cast_v<mp_integer>(arg0);
13371331 code_gotot code_goto (label (integer2string (number)));
13381332 c=code_goto;
13391333 }
13401334 else if (statement==" jsr" || statement==" jsr_w" )
13411335 {
13421336 // As 'goto', except we must also push the subroutine return address:
13431337 PRECONDITION (op.empty () && results.size () == 1 );
1344- mp_integer number;
1345- bool ret=to_integer (to_constant_expr (arg0), number);
1346- INVARIANT (!ret, " jsr argument should be an integer" );
1338+ const mp_integer number = numeric_cast_v<mp_integer>(arg0);
13471339 code_gotot code_goto (label (integer2string (number)));
13481340 c=code_goto;
13491341 results[0 ]=
@@ -1385,9 +1377,7 @@ code_blockt java_bytecode_convert_methodt::convert_instructions(
13851377 else if (statement==patternt (" if_?cmp??" ))
13861378 {
13871379 PRECONDITION (op.size () == 2 && results.empty ());
1388- mp_integer number;
1389- bool ret=to_integer (to_constant_expr (arg0), number);
1390- INVARIANT (!ret, " if_?cmp?? argument should be an integer" );
1380+ const mp_integer number = numeric_cast_v<mp_integer>(arg0);
13911381 c = convert_if_cmp (
13921382 address_map, statement, op, number, i_it->source_location );
13931383 }
@@ -1404,25 +1394,19 @@ code_blockt java_bytecode_convert_methodt::convert_instructions(
14041394
14051395 INVARIANT (!id.empty (), " unexpected bytecode-if" );
14061396 PRECONDITION (op.size () == 1 && results.empty ());
1407- mp_integer number;
1408- bool ret=to_integer (to_constant_expr (arg0), number);
1409- INVARIANT (!ret, " if?? argument should be an integer" );
1397+ const mp_integer number = numeric_cast_v<mp_integer>(arg0);
14101398 c = convert_if (address_map, op, id, number, i_it->source_location );
14111399 }
14121400 else if (statement==patternt (" ifnonnull" ))
14131401 {
14141402 PRECONDITION (op.size () == 1 && results.empty ());
1415- mp_integer number;
1416- bool ret=to_integer (to_constant_expr (arg0), number);
1417- INVARIANT (!ret, " ifnonnull argument should be an integer" );
1403+ const mp_integer number = numeric_cast_v<mp_integer>(arg0);
14181404 c = convert_ifnonull (address_map, op, number, i_it->source_location );
14191405 }
14201406 else if (statement==patternt (" ifnull" ))
14211407 {
14221408 PRECONDITION (op.size () == 1 && results.empty ());
1423- mp_integer number;
1424- bool ret=to_integer (to_constant_expr (arg0), number);
1425- INVARIANT (!ret, " ifnull argument should be an integer" );
1409+ const mp_integer number = numeric_cast_v<mp_integer>(arg0);
14261410 c = convert_ifnull (address_map, op, number, i_it->source_location );
14271411 }
14281412 else if (statement==" iinc" )
@@ -1619,10 +1603,7 @@ code_blockt java_bytecode_convert_methodt::convert_instructions(
16191603 {
16201604 // The first argument is the type, the second argument is the number of
16211605 // dimensions. The size of each dimension is on the stack.
1622- mp_integer number;
1623- bool ret=to_integer (to_constant_expr (arg1), number);
1624- INVARIANT (!ret, " multianewarray argument should be an integer" );
1625- std::size_t dimension=integer2size_t (number);
1606+ const std::size_t dimension = numeric_cast_v<std::size_t >(arg1);
16261607
16271608 op=pop (dimension);
16281609 assert (results.size ()==1 );
@@ -1953,9 +1934,7 @@ code_switcht java_bytecode_convert_methodt::convert_switch(
19531934 code_switch_caset code_case;
19541935 code_case.add_source_location () = location;
19551936
1956- mp_integer number;
1957- bool ret = to_integer (to_constant_expr (*a_it), number);
1958- DATA_INVARIANT (!ret, " case label expected to be integer" );
1937+ const mp_integer number = numeric_cast_v<mp_integer>(*a_it);
19591938 // The switch case does not contain any code, it just branches via a GOTO
19601939 // to the jump target of the tableswitch/lookupswitch case at
19611940 // hand. Therefore we consider this code to belong to the source bytecode
@@ -2073,9 +2052,7 @@ exprt::operandst &java_bytecode_convert_methodt::convert_const(
20732052 ieee_floatt value (spec);
20742053 if (arg0.type ().id () != ID_floatbv)
20752054 {
2076- mp_integer number;
2077- bool ret = to_integer (to_constant_expr (arg0), number);
2078- DATA_INVARIANT (!ret, " failed to convert constant" );
2055+ const mp_integer number = numeric_cast_v<mp_integer>(arg0);
20792056 value.from_integer (number);
20802057 }
20812058 else
@@ -2085,9 +2062,7 @@ exprt::operandst &java_bytecode_convert_methodt::convert_const(
20852062 }
20862063 else
20872064 {
2088- mp_integer value;
2089- bool ret = to_integer (to_constant_expr (arg0), value);
2090- DATA_INVARIANT (!ret, " failed to convert constant" );
2065+ const mp_integer value = numeric_cast_v<mp_integer>(arg0);
20912066 const typet type = java_type_from_char (statement[0 ]);
20922067 results[0 ] = from_integer (value, type);
20932068 }
0 commit comments