@@ -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
@@ -1332,19 +1328,15 @@ codet java_bytecode_convert_methodt::convert_instructions(
13321328 else if (statement==" goto" || statement==" goto_w" )
13331329 {
13341330 PRECONDITION (op.empty () && results.empty ());
1335- mp_integer number;
1336- bool ret=to_integer (to_constant_expr (arg0), number);
1337- INVARIANT (!ret, " goto argument should be an integer" );
1331+ const mp_integer number = numeric_cast_v<mp_integer>(arg0);
13381332 code_gotot code_goto (label (integer2string (number)));
13391333 c=code_goto;
13401334 }
13411335 else if (statement==" jsr" || statement==" jsr_w" )
13421336 {
13431337 // As 'goto', except we must also push the subroutine return address:
13441338 PRECONDITION (op.empty () && results.size () == 1 );
1345- mp_integer number;
1346- bool ret=to_integer (to_constant_expr (arg0), number);
1347- INVARIANT (!ret, " jsr argument should be an integer" );
1339+ const mp_integer number = numeric_cast_v<mp_integer>(arg0);
13481340 code_gotot code_goto (label (integer2string (number)));
13491341 c=code_goto;
13501342 results[0 ]=
@@ -1386,9 +1378,7 @@ codet java_bytecode_convert_methodt::convert_instructions(
13861378 else if (statement==patternt (" if_?cmp??" ))
13871379 {
13881380 PRECONDITION (op.size () == 2 && results.empty ());
1389- mp_integer number;
1390- bool ret=to_integer (to_constant_expr (arg0), number);
1391- INVARIANT (!ret, " if_?cmp?? argument should be an integer" );
1381+ const mp_integer number = numeric_cast_v<mp_integer>(arg0);
13921382 c = convert_if_cmp (
13931383 address_map, statement, op, number, i_it->source_location );
13941384 }
@@ -1405,25 +1395,19 @@ codet java_bytecode_convert_methodt::convert_instructions(
14051395
14061396 INVARIANT (!id.empty (), " unexpected bytecode-if" );
14071397 PRECONDITION (op.size () == 1 && results.empty ());
1408- mp_integer number;
1409- bool ret=to_integer (to_constant_expr (arg0), number);
1410- INVARIANT (!ret, " if?? argument should be an integer" );
1398+ const mp_integer number = numeric_cast_v<mp_integer>(arg0);
14111399 c = convert_if (address_map, op, id, number, i_it->source_location );
14121400 }
14131401 else if (statement==patternt (" ifnonnull" ))
14141402 {
14151403 PRECONDITION (op.size () == 1 && results.empty ());
1416- mp_integer number;
1417- bool ret=to_integer (to_constant_expr (arg0), number);
1418- INVARIANT (!ret, " ifnonnull argument should be an integer" );
1404+ const mp_integer number = numeric_cast_v<mp_integer>(arg0);
14191405 c = convert_ifnonull (address_map, op, number, i_it->source_location );
14201406 }
14211407 else if (statement==patternt (" ifnull" ))
14221408 {
14231409 PRECONDITION (op.size () == 1 && results.empty ());
1424- mp_integer number;
1425- bool ret=to_integer (to_constant_expr (arg0), number);
1426- INVARIANT (!ret, " ifnull argument should be an integer" );
1410+ const mp_integer number = numeric_cast_v<mp_integer>(arg0);
14271411 c = convert_ifnull (address_map, op, number, i_it->source_location );
14281412 }
14291413 else if (statement==" iinc" )
@@ -1620,10 +1604,7 @@ codet java_bytecode_convert_methodt::convert_instructions(
16201604 {
16211605 // The first argument is the type, the second argument is the number of
16221606 // dimensions. The size of each dimension is on the stack.
1623- mp_integer number;
1624- bool ret=to_integer (to_constant_expr (arg1), number);
1625- INVARIANT (!ret, " multianewarray argument should be an integer" );
1626- std::size_t dimension=integer2size_t (number);
1607+ const std::size_t dimension = numeric_cast_v<std::size_t >(arg1);
16271608
16281609 op=pop (dimension);
16291610 assert (results.size ()==1 );
@@ -1954,9 +1935,7 @@ codet java_bytecode_convert_methodt::convert_switch(
19541935 code_switch_caset code_case;
19551936 code_case.add_source_location () = location;
19561937
1957- mp_integer number;
1958- bool ret = to_integer (to_constant_expr (*a_it), number);
1959- DATA_INVARIANT (!ret, " case label expected to be integer" );
1938+ const mp_integer number = numeric_cast_v<mp_integer>(*a_it);
19601939 // The switch case does not contain any code, it just branches via a GOTO
19611940 // to the jump target of the tableswitch/lookupswitch case at
19621941 // hand. Therefore we consider this code to belong to the source bytecode
@@ -2074,9 +2053,7 @@ exprt::operandst &java_bytecode_convert_methodt::convert_const(
20742053 ieee_floatt value (spec);
20752054 if (arg0.type ().id () != ID_floatbv)
20762055 {
2077- mp_integer number;
2078- bool ret = to_integer (to_constant_expr (arg0), number);
2079- DATA_INVARIANT (!ret, " failed to convert constant" );
2056+ const mp_integer number = numeric_cast_v<mp_integer>(arg0);
20802057 value.from_integer (number);
20812058 }
20822059 else
@@ -2086,9 +2063,7 @@ exprt::operandst &java_bytecode_convert_methodt::convert_const(
20862063 }
20872064 else
20882065 {
2089- mp_integer value;
2090- bool ret = to_integer (to_constant_expr (arg0), value);
2091- DATA_INVARIANT (!ret, " failed to convert constant" );
2066+ const mp_integer value = numeric_cast_v<mp_integer>(arg0);
20922067 const typet type = java_type_from_char (statement[0 ]);
20932068 results[0 ] = from_integer (value, type);
20942069 }
0 commit comments