20 void convert(
const goto_programt::instructiont &instruction,
irept &irep)
22 irep.
set(ID_code, instruction.code);
24 if(instruction.function!=
"")
25 irep.
set(ID_function, instruction.function);
27 if(instruction.source_location.is_not_nil())
28 irep.
set(ID_location, instruction.source_location);
30 irep.
set(ID_type, (
long) instruction.type);
32 irep.
set(ID_guard, instruction.guard);
34 if(!instruction.targets.empty())
37 for(
const auto &target : instruction.targets)
39 irept t(std::to_string(target->location_number));
44 if(!instruction.labels.empty())
48 subs.reserve(instruction.labels.size());
49 for(
const auto &label : instruction.labels)
51 subs.push_back(
irept(label));
58 goto_programt::instructiont &instruction)
60 instruction.code=
static_cast<const codet &
>(irep.
find(ID_code));
61 instruction.function = irep.
find(ID_function).
id();
62 instruction.source_location=
66 instruction.guard =
static_cast<const exprt&
>(irep.
find(ID_guard));
72 for(
const auto &lsub : lsubs)
73 instruction.labels.push_back(lsub.id());
78 irep.
id(
"goto-program");
89 assert(irep.
id()==
"goto-program");
93 std::list< std::list<unsigned> > number_targets_list;
97 for(irept::subt::const_iterator it=subs.begin();
101 program.
instructions.push_back(goto_programt::instructiont());
104 number_targets_list.push_back(std::list<unsigned>());
105 const irept &targets=it->
find(ID_targets);
107 for(
const auto &tsub : tsubs)
108 number_targets_list.back().push_back(
115 std::list< std::list<unsigned> >::iterator nit=
116 number_targets_list.begin();
117 for(goto_programt::instructionst::iterator lit=
119 lit!=program.
instructions.end() && nit!=number_targets_list.end();
122 for(
const unsigned t : *nit)
127 if(fit->location_number==t)
129 lit->targets.push_back(fit);
136 std::cout <<
"Warning: could not resolve target link " 137 <<
"during irep->goto_program translation.\n";
goto_program_instruction_typet
The type of an instruction in a GOTO program.
void update()
Update all indices.
std::vector< irept > subt
void move_to_sub(irept &irep)
goto_programt -> irep conversion
instructionst instructions
The list of instructions in the goto program.
unsigned unsafe_string2unsigned(const std::string &str, int base)
void compute_location_numbers(unsigned &nr)
Compute location numbers.
const irep_idt & id() const
Base class for tree-like data structures with sharing.
void convert(const goto_programt::instructiont &instruction, irept &irep)
A specialization of goto_program_templatet over goto programs in which instructions have codet type...
Base class for all expressions.
irept & add(const irep_namet &name)
const std::string & id_string() const
A statement in a programming language.
#define forall_goto_program_instructions(it, program)
const irept & find(const irep_namet &name) const
void set(const irep_namet &name, const irep_idt &value)
instructionst::iterator targett