Go to the documentation of this file.
34 (*this)(goto_model, replacement_map);
55 (*this)(goto_program, goto_functions, ns, replacement_map);
83 "Called functions need to be present");
85 replacement_mapt::const_iterator r_it = replacement_map.find(
id);
87 if(r_it == replacement_map.end())
90 const irep_idt &new_id = r_it->second;
96 if(
to_code_type(
function.type()).return_type().
id() != ID_empty)
99 if(next_it != goto_program.
instructions.end() && next_it->is_assign())
101 const exprt &rhs = next_it->assign_rhs();
105 "returns must not be removed before replacing calls");
120 for(
const std::string &s : replacement_list)
122 std::string original;
123 std::string replacement;
128 replacement_map.insert(std::make_pair(original, replacement));
133 "conflicting replacement for function " + original,
"--replace-calls");
137 return replacement_map;
145 for(
const auto &p : replacement_map)
147 if(replacement_map.find(p.second) != replacement_map.end())
150 " cannot both be replaced and be a replacement",
157 "replacement function " +
id2string(p.second) +
" needs to be present",
163 if(ns.
lookup(it1->first).type != ns.
lookup(it2->first).type)
166 " are not type-compatible",
#define Forall_goto_program_instructions(it, program)
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
std::list< std::string > replacement_listt
Base class for all expressions.
function_mapt function_map
Expression to hold a symbol (variable)
void check_replacement_map(const replacement_mapt &replacement_map, const goto_functionst &goto_functions, const namespacet &ns) const
replacement_mapt parse_replacement_list(const replacement_listt &replacement_list) const
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
typet & type()
Return the type of the expression.
bool lookup(const irep_idt &name, const symbolt *&symbol) const override
See documentation for namespace_baset::lookup().
void split_string(const std::string &s, char delim, std::vector< std::string > &result, bool strip, bool remove_empty)
const code_typet & to_code_type(const typet &type)
Cast a typet to a code_typet.
#define DATA_INVARIANT(CONDITION, REASON)
This condition should be used to document that assumptions that are made on goto_functions,...
const std::string & id2string(const irep_idt &d)
std::map< irep_idt, irep_idt > replacement_mapt
#define PRECONDITION(CONDITION)
const irep_idt & get_identifier() const
const symbol_exprt & to_symbol_expr(const exprt &expr)
Cast an exprt to a symbol_exprt.
::goto_functiont goto_functiont
instructionst instructions
The list of instructions in the goto program.
A collection of goto functions.
goto_functionst goto_functions
GOTO functions.
void operator()(goto_modelt &goto_model, const replacement_listt &replacement_list) const
Replace function calls with calls to other functions.
A generic container class for the GOTO intermediate representation of one function.
symbol_exprt return_value_symbol(const irep_idt &identifier, const namespacet &ns)
produces the symbol that is used to store the return value of the function with the given identifier
instructionst::const_iterator const_targett
bool is_function_call() const
Thrown when users pass incorrect command line arguments, for example passing no files to analysis or ...
This class represents an instruction in the GOTO intermediate representation.
symbol_tablet symbol_table
Symbol table.
const exprt & call_function() const
Get the function that is called for FUNCTION_CALL.
void set_identifier(const irep_idt &identifier)