void assign_in_cprover_init(goto_functionst &gf, symbolt &symbol, const exprt &value) { symbol.value=value; goto_programt &body=get_body(gf, CPROVER_INIT); goto_programt::instructionst &instrs=body.instructions; const auto p(std::mem_fun_ref(&goto_programt::instructiont::is_end_function)); goto_programt::targett pos=std::find_if(instrs.begin(), instrs.end(), p); assert(instrs.end() != pos); pos=insert_before_preserving_source_location(body, pos); pos->type=goto_program_instruction_typet::ASSIGN; const symbol_exprt lhs(symbol.symbol_expr()); pos->code=code_assignt(lhs, value); }
void java_record_outputs( const symbolt &function, const exprt::operandst &main_arguments, code_blockt &init_code, symbol_tablet &symbol_table) { const code_typet::parameterst ¶meters= to_code_type(function.type).parameters(); exprt::operandst result; result.reserve(parameters.size()+1); bool has_return_value= to_code_type(function.type).return_type()!=empty_typet(); if(has_return_value) { // record return value codet output(ID_output); output.operands().resize(2); const symbolt &return_symbol=symbol_table.lookup("return'"); output.op0()= address_of_exprt( index_exprt( string_constantt(return_symbol.base_name), from_integer(0, index_type()))); output.op1()=return_symbol.symbol_expr(); output.add_source_location()=function.location; init_code.move_to_operands(output); } for(std::size_t param_number=0; param_number<parameters.size(); param_number++) { const symbolt &p_symbol= symbol_table.lookup(parameters[param_number].get_identifier()); if(p_symbol.type.id()==ID_pointer) { // record as an output codet output(ID_output); output.operands().resize(2); output.op0()= address_of_exprt( index_exprt( string_constantt(p_symbol.base_name), from_integer(0, index_type()))); output.op1()=main_arguments[param_number]; output.add_source_location()=function.location; init_code.move_to_operands(output); } } // record exceptional return variable as output codet output(ID_output); output.operands().resize(2); assert(symbol_table.has_symbol(id2string(function.name)+EXC_SUFFIX)); // retrieve the exception variable const symbolt exc_symbol=symbol_table.lookup( id2string(function.name)+EXC_SUFFIX); output.op0()=address_of_exprt( index_exprt(string_constantt(exc_symbol.base_name), from_integer(0, index_type()))); output.op1()=exc_symbol.symbol_expr(); output.add_source_location()=function.location; init_code.move_to_operands(output); }