12 #ifndef CPROVER_LINKING_LINKING_CLASS_H
13 #define CPROVER_LINKING_LINKING_CLASS_H
38 ns(_main_symbol_table)
68 std::unordered_map<irep_idt, irep_idt>
69 rename_symbols(
const std::unordered_set<irep_idt> &needs_to_be_renamed);
70 void copy_symbols(
const std::unordered_map<irep_idt, irep_idt> &);
118 const exprt &expr)
const;
122 const typet &type)
const;
126 const typet &type)
const;
140 exprt &conflict_path);
161 const std::string &msg);
166 const std::string &msg);
178 typedef std::unordered_map<irep_idt, std::unordered_set<irep_idt>>
used_byt;
bool replace_symbol_expr(symbol_exprt &dest) const override
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Base class for all expressions.
void duplicate_non_type_symbol(symbolt &old_symbol, symbolt &new_symbol)
bool adjust_object_type(const symbolt &old_symbol, const symbolt &new_symbol, bool &set_to_new)
bool needs_renaming_type(const symbolt &old_symbol, const symbolt &new_symbol)
rename_symbolt rename_symbol
void copy_symbols(const std::unordered_map< irep_idt, irep_idt > &)
std::string type_to_string_verbose(const symbolt &symbol) const
bool adjust_object_type_rec(const typet &type1, const typet &type2, adjust_type_infot &info)
bool needs_renaming_non_type(const symbolt &old_symbol, const symbolt &new_symbol)
std::unordered_map< irep_idt, irep_idt > rename_symbols(const std::unordered_set< irep_idt > &needs_to_be_renamed)
irep_idt rename(const irep_idt &)
void show_struct_diff(const struct_typet &old_type, const struct_typet &new_type)
symbol_table_baset & main_symbol_table
std::unordered_map< irep_idt, std::unordered_set< irep_idt > > used_byt
std::string expr_to_string(const irep_idt &identifier, const exprt &expr) const
void detailed_conflict_report_rec(const symbolt &old_symbol, const symbolt &new_symbol, const typet &type1, const typet &type2, unsigned depth, exprt &conflict_path)
void do_type_dependencies(std::unordered_set< irep_idt > &)
const symbol_table_baset & src_symbol_table
void link_warning(const symbolt &old_symbol, const symbolt &new_symbol, const std::string &msg)
void duplicate_object_symbol(symbolt &old_symbol, symbolt &new_symbol)
casting_replace_symbolt object_type_updates
std::string type_to_string(const irep_idt &identifier, const typet &type) const
linkingt(symbol_table_baset &_main_symbol_table, const symbol_table_baset &_src_symbol_table, message_handlert &_message_handler)
std::unordered_set< irep_idt > renamed_ids
void duplicate_type_symbol(symbolt &old_symbol, const symbolt &new_symbol)
std::string type_to_string_verbose(const symbolt &symbol, const typet &type) const
void detailed_conflict_report(const symbolt &old_symbol, const symbolt &new_symbol, const typet &type1, const typet &type2)
bool needs_renaming(const symbolt &old_symbol, const symbolt &new_symbol)
void duplicate_code_symbol(symbolt &old_symbol, symbolt &new_symbol)
void link_error(const symbolt &old_symbol, const symbolt &new_symbol, const std::string &msg)
A namespacet is essentially one or two symbol tables bound together, to allow for symbol lookups in t...
Replace expression or type symbols by an expression or type, respectively.
Structure type, corresponds to C style structs.
Expression to hold a symbol (variable)
static symbol_exprt typeless(const irep_idt &id)
Generate a symbol_exprt without a proper type.
The symbol table base class interface.
typet type
Type of symbol.
The type of an expression, extends irept.
API to expression classes.
const symbolt & old_symbol
adjust_type_infot(const symbolt &_old_symbol, const symbolt &_new_symbol)
std::unordered_set< irep_idt > o_symbols
std::unordered_set< irep_idt > n_symbols
const symbolt & new_symbol