26 add(f_it->first, body);
36 if(i_it->is_function_call())
39 if(function_expr.
id()==ID_symbol)
49 graph.insert(std::pair<irep_idt, irep_idt>(caller, callee));
54 out <<
"digraph call_graph {\n";
56 for(
const auto &edge :
graph)
58 out <<
" \"" << edge.first <<
"\" -> " 59 <<
"\"" << edge.second <<
"\" " 60 <<
" [arrowhead=\"vee\"];" 69 for(
const auto &edge :
graph)
71 out << edge.first <<
" -> " << edge.second <<
"\n";
77 for(
const auto &edge :
graph)
79 out <<
"<call_graph_edge caller=\"";
81 out <<
"\" callee=\"";
void add(const irep_idt &caller, const irep_idt &callee)
const std::string & id2string(const irep_idt &d)
const irep_idt & get_identifier() const
const irep_idt & id() const
void output_xml(std::ostream &out) const
API to expression classes.
void output_dot(std::ostream &out) const
void output(std::ostream &out) const
A specialization of goto_program_templatet over goto programs in which instructions have codet type...
Base class for all expressions.
const symbol_exprt & to_symbol_expr(const exprt &expr)
Cast a generic exprt to a symbol_exprt.
#define forall_goto_functions(it, functions)
static void escape_attribute(const std::string &s, std::ostream &out)
escaping for XML attributes, assuming that double quotes " are used consistently, not single quotes ...
#define forall_goto_program_instructions(it, program)
const code_function_callt & to_code_function_call(const codet &code)