libabigail
Loading...
Searching...
No Matches
abg-ir.cc File Reference

Definitions for the Internal Representation artifacts of libabigail. More...

#include <cxxabi.h>
#include <cstdint>
#include <functional>
#include <iterator>
#include <memory>
#include <sstream>
#include <typeinfo>
#include <unordered_map>
#include <utility>
#include <vector>
#include "abg-internal.h"
#include "abg-interned-str.h"
#include "abg-ir.h"
#include "abg-corpus.h"
#include "abg-regex.h"
#include "abg-corpus-priv.h"
#include "abg-comp-filter.h"
#include "abg-ir-priv.h"
Include dependency graph for abg-ir.cc:

Go to the source code of this file.

Namespaces

namespace  abigail
 Toplevel namespace for libabigail.
 
namespace  abigail::ir
 The namespace of the internal representation of ABI artifacts like types and decls.
 

Macros

#define ABG_RETURN(value)
 
#define ABG_RETURN_EQUAL(l, r)
 
#define ABG_RETURN_FALSE
 
#define CACHE_AND_RETURN_COMPARISON_RESULT(value)
 
#define CACHE_COMPARISON_RESULT_AND_RETURN(value)
 Cache the result of a comparison between too artifacts (l & r) and return immediately.
 
#define RETURN(value)
 
#define RETURN(value)
 
#define RETURN(value)
 
#define RETURN_TRUE_IF_COMPARISON_CYCLE_DETECTED(l, r)
 This macro is to be used while comparing composite types that might recursively refer to themselves. Comparing two such types might get us into a cyle.
 

Typedefs

typedef unordered_map< function_type_sptr, bool, function_type::hash, type_shared_ptr_equalfn_type_ptr_map
 
typedef unordered_map< const function_decl *, string, function_decl_hash, function_decl::ptr_equalfns_to_str_map_type
 Convenience typedef for a hash map of pointer to function_decl and string.
 
typedef unordered_map< interned_string, bool, hash_interned_stringinterned_string_bool_map_type
 Convenience typedef for a map of interned_string -> bool.
 
typedef unordered_map< string, string * > pool_map_type
 Convenience typedef for a map of string -> string*.
 

Enumerations

enum  lookup_entity_kind { LOOKUP_ENTITY_TYPE , LOOKUP_ENTITY_VAR }
 This enum describe the kind of entity to lookup, while using the lookup API. More...
 

Functions

decl_base_sptr add_decl_to_scope (decl_base_sptr decl, const scope_decl_sptr &scope)
 Appends a declaration to a given scope, if the declaration doesn't already belong to a scope.
 
decl_base_sptr add_decl_to_scope (decl_base_sptr decl, scope_decl *scope)
 Appends a declaration to a given scope, if the declaration doesn't already belong to one and if the declaration is not for a type that is supposed to be unique.
 
bool anonymous_data_member_exists_in_class (const var_decl &anon_dm, const class_or_union &clazz)
 Test if a given anonymous data member exists in a class or union.
 
class_or_union_sptr anonymous_data_member_to_class_or_union (const var_decl &d)
 Get the class_or_union type of a given anonymous data member.
 
class_or_unionanonymous_data_member_to_class_or_union (const var_decl *d)
 Get the class_or_union type of a given anonymous data member.
 
class_or_union_sptr anonymous_data_member_to_class_or_union (const var_decl_sptr &d)
 Get the class_or_union type of a given anonymous data member.
 
string build_internal_underlying_enum_type_name (const string &base_name, bool is_anonymous, uint64_t size)
 Build the internal name of the underlying type of an enum.
 
string build_qualified_name (const scope_decl *scope, const string &name)
 Build and return a qualified name from a name and its scope.
 
string build_qualified_name (const scope_decl *scope, const type_base_sptr &type)
 Build and return the qualified name of a type in its scope.
 
type_base_sptr canonicalize (type_base_sptr t, bool do_log=false, bool show_stats=false)
 Compute the canonical type of a given type.
 
bool class_or_union_types_of_same_kind (const class_or_union *first, const class_or_union *second)
 Test if two class or union types are of the same kind.
 
bool class_or_union_types_of_same_kind (const class_or_union_sptr &first, const class_or_union_sptr &second)
 Test if two class or union types are of the same kind.
 
array_type_def_sptr clone_array (const array_type_def_sptr &array)
 Clone an array type.
 
type_base_sptr clone_array_tree (const type_base_sptr t)
 Clone a type tree made of an array or a typedef of array.
 
qualified_type_def_sptr clone_qualified_type (const qualified_type_def_sptr &t)
 Clone a qualifiend type.
 
typedef_decl_sptr clone_typedef (const typedef_decl_sptr &t)
 Clone a typedef type.
 
bool collect_non_anonymous_data_members (const class_or_union *cou, string_decl_base_sptr_map &dms)
 Collect all the non-anonymous data members of a class or union type.
 
bool collect_non_anonymous_data_members (const class_or_union_sptr &cou, string_decl_base_sptr_map &dms)
 Collect all the non-anonymous data members of a class or union type.
 
bool compare_using_locations (const decl_base *f, const decl_base *s)
 Compare decls using their locations.
 
string components_to_type_name (const list< string > &comps)
 Turn a set of qualified name components (that name a type) into a qualified name string.
 
void compute_aliases_for_elf_symbol (const elf_symbol &sym, const string_elf_symbols_map_type &symtab, vector< elf_symbol_sptr > &aliases)
 
method_decl_sptr copy_member_function (const class_decl_sptr &clazz, const method_decl *f)
 Copy a method of a class into a new class.
 
method_decl_sptr copy_member_function (const class_decl_sptr &clazz, const method_decl_sptr &f)
 Copy a method of a class into a new class.
 
method_decl_sptr copy_member_function (const class_or_union_sptr &t, const method_decl *method)
 Copy a method of a class_or_union into a new class_or_union.
 
method_decl_sptr copy_member_function (const class_or_union_sptr &t, const method_decl_sptr &method)
 Copy a method of a class_or_union into a new class_or_union.
 
method_decl_sptr copy_member_function (const union_decl_sptr &union_type, const method_decl *f)
 Copy a method of a union_decl into a new union_decl.
 
method_decl_sptr copy_member_function (const union_decl_sptr &union_type, const method_decl_sptr &f)
 Copy a method of a union_decl into a new union_decl.
 
const class_or_union_sptr data_member_has_anonymous_type (const var_decl &d)
 Test if a data member has annonymous type or not.
 
const class_or_union_sptr data_member_has_anonymous_type (const var_decl *d)
 Test if a data member has annonymous type or not.
 
const class_or_union_sptr data_member_has_anonymous_type (const var_decl_sptr &d)
 Test if a data member has annonymous type or not.
 
decl_basedebug (const decl_base *artifact)
 Emit a textual representation of an artifact to std error stream for debugging purposes.
 
type_basedebug (const type_base *artifact)
 Emit a textual representation of an artifact to std error stream for debugging purposes.
 
type_or_decl_basedebug (const type_or_decl_base *artifact)
 Emit a textual representation of an artifact to std error stream for debugging purposes.
 
void debug_comp_stack (const environment &env)
 Emit a trace of the two comparison operands stack on the standard error stream.
 
bool debug_equals (const type_or_decl_base *l, const type_or_decl_base *r)
 Test if two ABI artifacts are equal.
 
string demangle_cplus_mangled_name (const string &mangled_name)
 Demangle a C++ mangled name and return the resulting string.
 
bool elf_symbol_is_function (elf_symbol::type t)
 Test if the type of an ELF symbol denotes a function symbol.
 
bool elf_symbol_is_variable (elf_symbol::type t)
 Test if the type of an ELF symbol denotes a function symbol.
 
bool elf_symbols_alias (const elf_symbol &s1, const elf_symbol &s2)
 Test if two symbols alias.
 
bool elf_symbols_alias (const elf_symbol *s1, const elf_symbol *s2)
 Test if two symbols alias.
 
bool elf_symbols_alias (const elf_symbol_sptr s1, const elf_symbol_sptr s2)
 Test if two symbols alias.
 
bool enum_has_non_name_change (const enum_type_decl &l, const enum_type_decl &r, change_kind *k)
 Test if two enums differ, but not by a name change.
 
bool equals (const array_type_def &l, const array_type_def &r, change_kind *k)
 Compares two instances of array_type_def.
 
bool equals (const array_type_def::subrange_type &l, const array_type_def::subrange_type &r, change_kind *k)
 Compares two isntances of array_type_def::subrange_type.
 
bool equals (const class_decl &l, const class_decl &r, change_kind *k)
 Compares two instances of class_decl.
 
bool equals (const class_decl::base_spec &l, const class_decl::base_spec &r, change_kind *k)
 Compares two instances of class_decl::base_spec.
 
bool equals (const class_or_union &l, const class_or_union &r, change_kind *k)
 Compares two instances of class_or_union.
 
bool equals (const decl_base &l, const decl_base &r, change_kind *k)
 Compares two instances of decl_base.
 
bool equals (const enum_type_decl &l, const enum_type_decl &r, change_kind *k)
 Compares two instances of enum_type_decl.
 
bool equals (const function_decl &l, const function_decl &r, change_kind *k)
 Compares two instances of function_decl.
 
bool equals (const function_decl::parameter &l, const function_decl::parameter &r, change_kind *k)
 Compares two instances of function_decl::parameter.
 
bool equals (const function_type &l, const function_type &r, change_kind *k)
 Compare two function types.
 
bool equals (const pointer_type_def &l, const pointer_type_def &r, change_kind *k)
 Compares two instances of pointer_type_def.
 
bool equals (const ptr_to_mbr_type &l, const ptr_to_mbr_type &r, change_kind *k)
 Compares two instances of ptr_to_mbr_type.
 
bool equals (const qualified_type_def &l, const qualified_type_def &r, change_kind *k)
 Compares two instances of qualified_type_def.
 
bool equals (const reference_type_def &l, const reference_type_def &r, change_kind *k)
 Compares two instances of reference_type_def.
 
bool equals (const scope_decl &l, const scope_decl &r, change_kind *k)
 Compares two instances of scope_decl.
 
bool equals (const scope_type_decl &l, const scope_type_decl &r, change_kind *k)
 Compares two instances of scope_type_decl.
 
bool equals (const type_base &l, const type_base &r, change_kind *k)
 Compares two instances of type_base.
 
bool equals (const type_decl &l, const type_decl &r, change_kind *k)
 Compares two instances of type_decl.
 
bool equals (const typedef_decl &l, const typedef_decl &r, change_kind *k)
 Compares two instances of typedef_decl.
 
bool equals (const union_decl &l, const union_decl &r, change_kind *k)
 Compares two instances of union_decl.
 
bool equals (const var_decl &l, const var_decl &r, change_kind *k)
 Compares two instances of var_decl.
 
bool equals_modulo_cv_qualifier (const array_type_def *l, const array_type_def *r)
 Test if two variables are equals modulo CV qualifiers.
 
var_decl_sptr find_data_member_from_anonymous_data_member (const var_decl_sptr &anon_dm, const string &name)
 Find a data member inside an anonymous data member.
 
var_decl_sptr find_first_data_member_matching_regexp (const class_or_union &t, const regex::regex_t_sptr &r)
 Find the first data member of a class or union which name matches a regular expression.
 
var_decl_sptr find_last_data_member_matching_regexp (const class_or_union &t, const regex::regex_t_sptr &regex)
 Find the last data member of a class or union which name matches a regular expression.
 
void fixup_virtual_member_function (method_decl_sptr method)
 When a virtual member function has seen its virtualness set by set_member_function_is_virtual(), this function ensures that the member function is added to the specific vectors and maps of virtual member function of its class.
 
void fns_to_str (vector< function_decl * >::const_iterator a_begin, vector< function_decl * >::const_iterator a_end, vector< function_decl * >::const_iterator b_begin, vector< function_decl * >::const_iterator b_end, std::ostream &o)
 For each sequence of functions given in argument, generate a sequence of string that matches a given sequence of function. In the resulting sequence, each function is "uniquely representated" by a string. For instance, if the same function "foo" appears at indexes 1 and 3, then the same string 'schmurf' (okay, we don't care about the actual string) would appear at index 1 and 3.
 
void fqn_to_components (const string &fqn, list< string > &comps)
 Decompose a fully qualified name into the list of its components.
 
bool function_decl_is_less_than (const function_decl &f, const function_decl &s)
 Test if the pretty representation of a given function_decl is lexicographically less then the pretty representation of another function_decl.
 
bool function_decls_alias (const function_decl &f1, const function_decl &f2)
 Test if two function declarations are aliases.
 
uint64_t get_absolute_data_member_offset (const var_decl &m)
 Get the absolute offset of a data member.
 
uint64_t get_absolute_data_member_offset (const var_decl_sptr &m)
 Get the absolute offset of a data member.
 
const locationget_artificial_or_natural_location (const decl_base *decl)
 Get the artificial location of a decl.
 
size_t get_canonical_type_index (const type_base &t)
 Getter of the canonical type index of a given type.
 
size_t get_canonical_type_index (const type_base *t)
 Getter of the canonical type index of a given type.
 
size_t get_canonical_type_index (const type_base_sptr &t)
 Getter of the canonical type index of a given type.
 
string get_class_or_enum_flat_representation (const type_base &coe, const string &indent, bool one_line, bool internal, bool qualified_name)
 Get the flat representation of an instance of enum_type_decl type.
 
string get_class_or_union_flat_representation (const class_or_union &cou, const string &indent, bool one_line, bool internal, bool qualified_names)
 Get the flat representation of an instance of class_or_union type.
 
string get_class_or_union_flat_representation (const class_or_union *cou, const string &indent, bool one_line, bool internal, bool qualified_names)
 Get the flat representation of an instance of class_or_union type.
 
string get_class_or_union_flat_representation (const class_or_union_sptr &cou, const string &indent, bool one_line, bool internal, bool qualified_names)
 Get the flat representation of an instance of class_or_union type.
 
var_decl_sptr get_data_member (class_or_union *clazz, const char *member_name)
 Get a given data member, referred to by its name, of a class type.
 
var_decl_sptr get_data_member (type_base *clazz, const char *member_name)
 Get a given data member, referred to by its name, of a class type.
 
bool get_data_member_is_laid_out (const var_decl &m)
 Test whether a data member is laid out.
 
bool get_data_member_is_laid_out (const var_decl_sptr m)
 Test whether a data member is laid out.
 
uint64_t get_data_member_offset (const decl_base_sptr d)
 Get the offset of a data member.
 
uint64_t get_data_member_offset (const var_decl &m)
 Get the offset of a data member.
 
uint64_t get_data_member_offset (const var_decl_sptr m)
 Get the offset of a data member.
 
string get_debug_representation (const type_or_decl_base *artifact)
 Get the textual representation of a type for debugging purposes.
 
string get_enum_flat_representation (const enum_type_decl &enum_type, const string &indent, bool one_line, bool qualified_names)
 Get the flat representation of an instance of enum_type_decl type.
 
string get_enum_flat_representation (const enum_type_decl *enum_type, const string &indent, bool one_line, bool qualified_names)
 Get the flat representation of an instance of enum_type_decl type.
 
string get_enum_flat_representation (const enum_type_decl_sptr &enum_type, const string &indent, bool one_line, bool qualified_names)
 Get the flat representation of an instance of enum_type_decl type.
 
type_baseget_exemplar_type (const type_base *type)
 For a given type, return its exemplar type.
 
const var_decl_sptr get_first_non_anonymous_data_member (const var_decl_sptr anon_dm)
 Get the first non-anonymous data member of a given anonymous data member.
 
interned_string get_function_id_or_pretty_representation (const function_decl *fn)
 Get the ID of a function, or, if the ID can designate several different functions, get its pretty representation.
 
const function_decl::parameterget_function_parameter (const decl_base *fun, unsigned parm_index)
 Get the function parameter designated by its index.
 
interned_string get_function_type_name (const function_type &fn_type, bool internal)
 Get the name of a given function type and return a copy of it.
 
interned_string get_function_type_name (const function_type *fn_type, bool internal)
 Get the name of a given function type and return a copy of it.
 
interned_string get_function_type_name (const function_type_sptr &fn_type, bool internal)
 Get the name of a given function type and return a copy of it.
 
const global_scopeget_global_scope (const decl_base &decl)
 return the global scope as seen by a given declaration.
 
const global_scopeget_global_scope (const decl_base *decl)
 return the global scope as seen by a given declaration.
 
const global_scopeget_global_scope (const shared_ptr< decl_base > decl)
 Return the global scope as seen by a given declaration.
 
var_decl_sptr get_last_data_member (const class_or_union &klass)
 Get the last data member of a class type.
 
var_decl_sptr get_last_data_member (const class_or_union *klass)
 Get the last data member of a class type.
 
var_decl_sptr get_last_data_member (const class_or_union_sptr &klass)
 Get the last data member of a class type.
 
location get_location (const decl_base_sptr &decl)
 Get the location of a given declaration.
 
location get_location (const type_base_sptr &type)
 Get the location of the declaration of a given type.
 
access_specifier get_member_access_specifier (const decl_base &d)
 Gets the access specifier for a class member.
 
access_specifier get_member_access_specifier (const decl_base_sptr &d)
 Gets the access specifier for a class member.
 
bool get_member_function_is_const (const function_decl &f)
 Test whether a member function is const.
 
bool get_member_function_is_const (const function_decl_sptr &f)
 Test whether a member function is const.
 
bool get_member_function_is_ctor (const function_decl &f)
 Test whether a member function is a constructor.
 
bool get_member_function_is_ctor (const function_decl_sptr &f)
 Test whether a member function is a constructor.
 
bool get_member_function_is_dtor (const function_decl &f)
 Test whether a member function is a destructor.
 
bool get_member_function_is_dtor (const function_decl_sptr &f)
 Test whether a member function is a destructor.
 
bool get_member_function_is_virtual (const function_decl &f)
 Test if a given member function is virtual.
 
bool get_member_function_is_virtual (const function_decl *mem_fn)
 Test if a given member function is virtual.
 
bool get_member_function_is_virtual (const function_decl_sptr &mem_fn)
 Test if a given member function is virtual.
 
ssize_t get_member_function_vtable_offset (const function_decl &f)
 Get the vtable offset of a member function.
 
ssize_t get_member_function_vtable_offset (const function_decl_sptr &f)
 Get the vtable offset of a member function.
 
bool get_member_is_static (const decl_base &d)
 Gets a flag saying if a class member is static or not.
 
bool get_member_is_static (const decl_base *d)
 Gets a flag saying if a class member is static or not.
 
bool get_member_is_static (const decl_base_sptr &d)
 Gets a flag saying if a class member is static or not.
 
interned_string get_method_type_name (const method_type &fn_type, bool internal=false)
 Get the name of a given method type and return a copy of it.
 
interned_string get_method_type_name (const method_type *fn_type, bool internal)
 Get the name of a given method type and return a copy of it.
 
interned_string get_method_type_name (const method_type_sptr fn_type, bool internal)
 Get the name of a given method type and return a copy of it.
 
string get_name (const type_or_decl_base *tod, bool qualified)
 Build and return a copy of the name of an ABI artifact that is either a type or a decl.
 
string get_name (const type_or_decl_base_sptr &tod, bool qualified)
 Build and return a copy of the name of an ABI artifact that is either a type of a decl.
 
interned_string get_name_of_pointer_to_type (const type_base &pointed_to_type, bool qualified, bool internal)
 Get the name of the pointer to a given type.
 
interned_string get_name_of_qualified_type (const type_base_sptr &underlying_type, qualified_type_def::CV quals, bool qualified, bool internal)
 Get the name of a qualified type, given the underlying type and its qualifiers.
 
interned_string get_name_of_reference_to_type (const type_base &pointed_to_type, bool lvalue_reference, bool qualified, bool internal)
 Get the name of the reference to a given type.
 
const locationget_natural_or_artificial_location (const decl_base *decl)
 Get the non-artificial (natural) location of a decl.
 
const var_decl_sptr get_next_data_member (const class_or_union *klass, const var_decl_sptr &data_member)
 In the context of a given class or union, this function returns the data member that is located after a given data member.
 
const var_decl_sptr get_next_data_member (const class_or_union_sptr &klass, const var_decl_sptr &data_member)
 In the context of a given class or union, this function returns the data member that is located after a given data member.
 
bool get_next_data_member_offset (const class_or_union *klass, const var_decl_sptr &dm, uint64_t &offset)
 Get the offset of the non-static data member that comes after a given one.
 
bool get_next_data_member_offset (const class_or_union_sptr &klass, const var_decl_sptr &dm, uint64_t &offset)
 Get the offset of the non-static data member that comes after a given one.
 
template<>
const interned_stringget_node_name (class_decl_sptr node)
 Gets the name of a class_decl node.
 
template<>
const interned_stringget_node_name (type_base_sptr node)
 Gets the name of a type_base node.
 
template<>
const interned_stringget_node_name (var_decl_sptr node)
 Gets the name of a var_decl node.
 
string get_pretty_representation (const decl_base *d, bool internal)
 Get a copy of the pretty representation of a decl.
 
string get_pretty_representation (const decl_base_sptr &d, bool internal)
 Get a copy of the pretty representation of a decl.
 
string get_pretty_representation (const function_type &fn_type, bool internal)
 Get the pretty representation of a function type.
 
string get_pretty_representation (const function_type *fn_type, bool internal)
 Get the pretty representation of a function type.
 
string get_pretty_representation (const function_type_sptr &fn_type, bool internal)
 Get the pretty representation of a function type.
 
string get_pretty_representation (const method_type &method, bool internal)
 Get the pretty representation of a method type.
 
string get_pretty_representation (const method_type *method, bool internal)
 Get the pretty representation of a method type.
 
string get_pretty_representation (const method_type_sptr method, bool internal)
 Get the pretty representation of a method type.
 
string get_pretty_representation (const type_base *t, bool internal)
 Get a copy of the pretty representation of a type.
 
string get_pretty_representation (const type_base_sptr &t, bool internal)
 Get a copy of the pretty representation of a type.
 
string get_pretty_representation (const type_or_decl_base *tod, bool internal)
 Build and return a copy of the pretty representation of an ABI artifact that could be either a type of a decl.
 
string get_pretty_representation (const type_or_decl_base_sptr &tod, bool internal)
 Build and return a copy of the pretty representation of an ABI artifact that could be either a type of a decl.
 
string get_string_representation_of_cv_quals (const qualified_type_def::CV cv_quals)
 Get the string representation of a CV qualifier bitmap.
 
const scope_declget_top_most_scope_under (const decl_base *decl, const scope_decl *scope)
 Return the a scope S containing a given declaration and that is right under a given scope P.
 
const scope_declget_top_most_scope_under (const decl_base_sptr decl, const scope_decl *scope)
 Return the a scope S containing a given declaration and that is right under a given scope P.
 
const scope_declget_top_most_scope_under (const decl_base_sptr decl, const scope_decl_sptr scope)
 Return the a scope S containing a given declaration and that is right under a given scope P.
 
translation_unitget_translation_unit (const type_or_decl_base &t)
 Return the translation unit a declaration belongs to.
 
translation_unitget_translation_unit (const type_or_decl_base *decl)
 Return the translation unit a declaration belongs to.
 
translation_unitget_translation_unit (const type_or_decl_base_sptr &decl)
 Return the translation unit a declaration belongs to.
 
const decl_baseget_type_declaration (const type_base *t)
 Get the declaration for a given type.
 
decl_base_sptr get_type_declaration (const type_base_sptr t)
 Get the declaration for a given type.
 
decl_baseget_type_declaration (type_base *t)
 Get the declaration for a given type.
 
interned_string get_type_name (const type_base &t, bool qualified, bool internal)
 Get the name of a given type and return a copy of it.
 
interned_string get_type_name (const type_base *t, bool qualified, bool internal)
 Get the name of a given type and return a copy of it.
 
interned_string get_type_name (const type_base_sptr &t, bool qualified, bool internal)
 Get the name of a given type and return a copy of it.
 
scope_declget_type_scope (const type_base_sptr &t)
 Get the scope of a given type.
 
scope_declget_type_scope (type_base *t)
 Get the scope of a given type.
 
uint64_t get_var_size_in_bits (const var_decl_sptr &v)
 Get the size of a given variable.
 
var_decl_sptr has_fake_flexible_array_data_member (const class_decl &klass)
 Test if the last data member of a class is an array with one element.
 
var_decl_sptr has_fake_flexible_array_data_member (const class_decl *klass)
 Test if the last data member of a class is an array with one element.
 
var_decl_sptr has_fake_flexible_array_data_member (const class_decl_sptr &klass)
 Test if the last data member of a class is an array with one element.
 
var_decl_sptr has_flexible_array_data_member (const class_decl &klass)
 Test if the last data member of a class is an array with non-finite data member.
 
var_decl_sptr has_flexible_array_data_member (const class_decl *klass)
 Test if the last data member of a class is an array with non-finite data member.
 
var_decl_sptr has_flexible_array_data_member (const class_decl_sptr &klass)
 Test if the last data member of a class is an array with non-finite data member.
 
bool has_scope (const decl_base &d)
 Tests if a declaration has got a scope.
 
bool has_scope (const decl_base_sptr d)
 Tests if a declaration has got a scope.
 
size_t hash_type (const type_base *t)
 Hash an ABI artifact that is a type.
 
size_t hash_type_or_decl (const type_or_decl_base *tod)
 Hash an ABI artifact that is either a type or a decl.
 
size_t hash_type_or_decl (const type_or_decl_base_sptr &tod)
 Hash an ABI artifact that is either a type of a decl.
 
decl_base_sptr insert_decl_into_scope (decl_base_sptr decl, scope_decl::declarations::iterator before, scope_decl *scope)
 Inserts a declaration into a given scope, before a given IR child node of the scope.
 
decl_base_sptr insert_decl_into_scope (decl_base_sptr decl, scope_decl::declarations::iterator before, scope_decl_sptr scope)
 Inserts a declaration into a given scope, before a given IR child node of the scope.
 
bool is_ada_language (translation_unit::language l)
 Test if a language enumerator designates the Ada language.
 
bool is_anonymous_data_member (const decl_base &d)
 Test if a decl is an anonymous data member.
 
const var_declis_anonymous_data_member (const decl_base *d)
 Test if a decl is an anonymous data member.
 
var_decl_sptr is_anonymous_data_member (const decl_base_sptr &d)
 Test if a decl is an anonymous data member.
 
const var_declis_anonymous_data_member (const type_or_decl_base *d)
 Test if a decl is an anonymous data member.
 
var_decl_sptr is_anonymous_data_member (const type_or_decl_base_sptr &d)
 Test if a decl is an anonymous data member.
 
bool is_anonymous_data_member (const var_decl &d)
 Test if a var_decl is an anonymous data member.
 
const var_declis_anonymous_data_member (const var_decl *d)
 Test if a var_decl is an anonymous data member.
 
var_decl_sptr is_anonymous_data_member (const var_decl_sptr &d)
 Test if a var_decl is an anonymous data member.
 
bool is_anonymous_or_typedef_named (const decl_base &d)
 Test if a given decl is anonymous or has a naming typedef.
 
bool is_anonymous_type (const type_base *t)
 Test whether a declaration is a type.
 
bool is_anonymous_type (const type_base_sptr &t)
 Test if a given type is anonymous.
 
qualified_type_def_sptr is_array_of_qualified_element (const array_type_def_sptr &array)
 Tests if the element of a given array is a qualified type.
 
array_type_def_sptr is_array_of_qualified_element (const type_base_sptr &type)
 Test if an array type is an array to a qualified element type.
 
array_type_defis_array_type (const type_or_decl_base *type, bool look_through_qualifiers)
 Test if a type is an array_type_def.
 
array_type_def_sptr is_array_type (const type_or_decl_base_sptr &type, bool look_through_qualifiers)
 Test if a type is an array_type_def.
 
class_or_unionis_at_class_scope (const decl_base &decl)
 Tests whether a given decl is at class scope.
 
class_or_unionis_at_class_scope (const decl_base *decl)
 Tests whether a given decl is at class scope.
 
class_or_unionis_at_class_scope (const decl_base_sptr decl)
 Tests whether a given decl is at class scope.
 
bool is_at_global_scope (const decl_base &decl)
 Tests whether a given declaration is at global scope.
 
bool is_at_global_scope (const decl_base *decl)
 Tests whether a given declaration is at global scope.
 
bool is_at_global_scope (const decl_base_sptr decl)
 Tests whether a given declaration is at global scope.
 
bool is_at_template_scope (const shared_ptr< decl_base > decl)
 Tests whether a given decl is at template scope.
 
bool is_c_language (translation_unit::language l)
 Test if a language enumerator designates the C language.
 
class_decl::base_specis_class_base_spec (const type_or_decl_base *tod)
 Test if an ABI artifact is a class base specifier.
 
class_decl::base_spec_sptr is_class_base_spec (type_or_decl_base_sptr tod)
 Test if an ABI artifact is a class base specifier.
 
shared_ptr< class_or_unionis_class_or_union_type (const shared_ptr< type_or_decl_base > &t)
 Test if a type is a class_or_union.
 
class_or_unionis_class_or_union_type (const type_or_decl_base *t)
 Test if a type is a class_or_union.
 
bool is_class_type (const type_or_decl_base &t)
 Test whether a type is a class.
 
class_declis_class_type (const type_or_decl_base *t)
 Test whether a type is a class.
 
class_decl_sptr is_class_type (const type_or_decl_base_sptr &d)
 Test whether a type is a class.
 
template<>
bool is_comparison_cycle_detected (const class_decl &l, const class_decl &r)
 Detect if a recursive comparison cycle is detected while structurally comparing two class_decl types.
 
template<typename T >
bool is_comparison_cycle_detected (T &l, T &r)
 Detect if a recursive comparison cycle is detected while structurally comparing two types (a.k.a member-wise comparison).
 
class_decl_sptr is_compatible_with_class_type (const decl_base_sptr &t)
 Test if a type is a class. This function looks through typedefs.
 
class_decl_sptr is_compatible_with_class_type (const type_base_sptr &t)
 Test if a type is a class. This function looks through typedefs.
 
enum_type_decl_sptr is_compatible_with_enum_type (const decl_base_sptr &t)
 Test if a type is an enum. This function looks through typedefs.
 
enum_type_decl_sptr is_compatible_with_enum_type (const type_base_sptr &t)
 Test if a type is an enum. This function looks through typedefs.
 
bool is_const_qualified_type (const qualified_type_def_sptr &t)
 Test if a given qualified type is const.
 
bool is_const_qualified_type (const type_base_sptr &t)
 Test if a given type is const-qualified.
 
bool is_cplus_plus_language (translation_unit::language l)
 Test if a language enumerator designates the C++ language.
 
var_declis_data_member (const decl_base *d)
 Test if a decl is a data member.
 
var_decl_sptr is_data_member (const decl_base_sptr &d)
 Test if a decl is a data member.
 
var_declis_data_member (const type_or_decl_base *d)
 Test if a decl is a data member.
 
var_decl_sptr is_data_member (const type_or_decl_base_sptr &d)
 Test if a decl is a data member.
 
bool is_data_member (const var_decl &v)
 Test if a var_decl is a data member.
 
bool is_data_member (const var_decl *v)
 Test if a var_decl is a data member.
 
bool is_data_member (const var_decl_sptr d)
 Test if a var_decl is a data member.
 
bool is_data_member_of_anonymous_class_or_union (const var_decl &d)
 Test if a var_decl is a data member belonging to an anonymous type.
 
bool is_data_member_of_anonymous_class_or_union (const var_decl *d)
 Test if a var_decl is a data member belonging to an anonymous type.
 
bool is_data_member_of_anonymous_class_or_union (const var_decl_sptr &d)
 Test if a var_decl is a data member belonging to an anonymous type.
 
decl_baseis_decl (const type_or_decl_base *d)
 Test if an ABI artifact is a declaration.
 
decl_base_sptr is_decl (const type_or_decl_base_sptr &d)
 Test if an ABI artifact is a declaration.
 
decl_baseis_decl_slow (const type_or_decl_base *t)
 Test if an ABI artifact is a declaration.
 
decl_base_sptr is_decl_slow (const type_or_decl_base_sptr &t)
 Test if an ABI artifact is a declaration.
 
bool is_declaration_only_class_or_union_type (const type_base *t, bool look_through_decl_only)
 Test wheter a type is a declaration-only class.
 
bool is_declaration_only_class_or_union_type (const type_base_sptr &t, bool look_through_decl_only)
 Test wheter a type is a declaration-only class.
 
bool is_declaration_only_class_type (const type_base_sptr &t, bool look_through_decl_only)
 Test wheter a type is a declaration-only class.
 
const enum_type_declis_enum_type (const type_or_decl_base *d)
 Test if a decl is an enum_type_decl.
 
enum_type_decl_sptr is_enum_type (const type_or_decl_base_sptr &d)
 Test if a decl is an enum_type_decl.
 
bool is_enumerator_present_in_enum (const enum_type_decl::enumerator &enr, const enum_type_decl &enom)
 Test if a given enumerator is found present in an enum.
 
bool is_function_decl (const type_or_decl_base &d)
 Test whether a declaration is a function_decl.
 
function_declis_function_decl (const type_or_decl_base *d)
 Test whether a declaration is a function_decl.
 
function_decl_sptr is_function_decl (const type_or_decl_base_sptr &d)
 Test whether a declaration is a function_decl.
 
function_decl::parameteris_function_parameter (const type_or_decl_base *tod)
 Test whether a declaration is a function_decl.
 
function_decl::parameter_sptr is_function_parameter (const type_or_decl_base_sptr tod)
 Test whether an ABI artifact is a function_decl.
 
bool is_function_template_pattern (const shared_ptr< decl_base > decl)
 Test whether a decl is the pattern of a function template.
 
const function_typeis_function_type (const type_or_decl_base *t)
 Test whether a type is a function_type.
 
function_type_sptr is_function_type (const type_or_decl_base_sptr &t)
 Test whether a type is a function_type.
 
function_typeis_function_type (type_or_decl_base *t)
 Test whether a type is a function_type.
 
bool is_global_scope (const scope_decl &scope)
 Tests whether if a given scope is the global scope.
 
const global_scopeis_global_scope (const scope_decl *scope)
 Tests whether if a given scope is the global scope.
 
bool is_global_scope (const shared_ptr< scope_decl >scope)
 Tests whether if a given scope is the global scope.
 
type_declis_integral_type (const type_or_decl_base *t)
 Test if a type is an integral type.
 
type_decl_sptr is_integral_type (const type_or_decl_base_sptr &t)
 Test if a type is an integral type.
 
bool is_java_language (translation_unit::language l)
 Test if a language enumerator designates the Java language.
 
bool is_member_decl (const decl_base &d)
 Tests if a declaration is a class member.
 
bool is_member_decl (const decl_base *d)
 Tests if a declaration is a class member.
 
bool is_member_decl (const decl_base_sptr d)
 Tests if a declaration is a class member.
 
bool is_member_function (const function_decl &f)
 Test whether a function_decl is a member function.
 
bool is_member_function (const function_decl *f)
 Test whether a function_decl is a member function.
 
bool is_member_function (const function_decl_sptr &f)
 Test whether a function_decl is a member function.
 
bool is_member_type (const type_base_sptr &t)
 Tests if a type is a class member.
 
method_declis_method_decl (const type_or_decl_base &d)
 Test if a function_decl is actually a method_decl.
 
method_declis_method_decl (const type_or_decl_base *d)
 Test if a function_decl is actually a method_decl.
 
method_decl_sptr is_method_decl (const type_or_decl_base_sptr &d)
 Test if a function_decl is actually a method_decl.
 
const method_typeis_method_type (const type_or_decl_base *t)
 Test whether a type is a method_type.
 
method_type_sptr is_method_type (const type_or_decl_base_sptr &t)
 Test whether a type is a method_type.
 
method_typeis_method_type (type_or_decl_base *t)
 Test whether a type is a method_type.
 
namespace_declis_namespace (const decl_base *d)
 Tests if a declaration is a namespace declaration.
 
namespace_decl_sptr is_namespace (const decl_base_sptr &d)
 Tests if a declaration is a namespace declaration.
 
bool is_non_canonicalized_type (const type_base *t)
 Test if a given type is allowed to be non canonicalized.
 
bool is_non_canonicalized_type (const type_base_sptr &t)
 Test if a given type is allowed to be non canonicalized.
 
bool is_npaf_type (const type_base_sptr &t)
 Test if a type is a neither a pointer, an array nor a function type.
 
pointer_type_def_sptr is_pointer_to_array_type (const type_base_sptr &t)
 Test if a type is a pointer to array type.
 
pointer_type_def_sptr is_pointer_to_function_type (const type_base_sptr &t)
 Test if a type is a pointer to function type.
 
pointer_type_def_sptr is_pointer_to_npaf_type (const type_base_sptr &t)
 Test if we are looking at a pointer to a neither-a-pointer-to-an-array-nor-a-function type.
 
pointer_type_def_sptr is_pointer_to_ptr_to_mbr_type (const type_base_sptr &t)
 Test if we are looking at a pointer to pointer to member type.
 
const pointer_type_defis_pointer_type (const type_or_decl_base *t, bool look_through_qualifiers)
 Test whether a type is a pointer_type_def.
 
pointer_type_def_sptr is_pointer_type (const type_or_decl_base_sptr &t, bool look_through_qualifiers)
 Test whether a type is a pointer_type_def.
 
bool is_ptr_ref_or_qual_type (const type_base *t)
 Helper to detect if a type is either a reference, a pointer, or a qualified type.
 
const ptr_to_mbr_typeis_ptr_to_mbr_type (const type_or_decl_base *t, bool look_through_qualifiers)
 Test whether a type is a ptr_to_mbr_type.
 
ptr_to_mbr_type_sptr is_ptr_to_mbr_type (const type_or_decl_base_sptr &t, bool look_through_qualifiers)
 Test whether a type is a ptr_to_mbr_type_sptr.
 
qualified_type_defis_qualified_type (const type_or_decl_base *t)
 Test whether a type is a reference_type_def.
 
qualified_type_def_sptr is_qualified_type (const type_or_decl_base_sptr &t)
 Test whether a type is a qualified_type_def.
 
type_declis_real_type (const type_or_decl_base *t)
 Test if a type is a real type.
 
type_decl_sptr is_real_type (const type_or_decl_base_sptr &t)
 Test if a type is a real type.
 
const reference_type_defis_reference_type (const type_or_decl_base *t, bool look_through_qualifiers)
 Test whether a type is a reference_type_def.
 
reference_type_def_sptr is_reference_type (const type_or_decl_base_sptr &t, bool look_through_qualifiers)
 Test whether a type is a reference_type_def.
 
reference_type_defis_reference_type (type_or_decl_base *t, bool look_through_qualifiers)
 Test whether a type is a reference_type_def.
 
const scope_declis_scope_decl (const decl_base *d)
 Test if a declaration is a scope_decl.
 
scope_decl_sptr is_scope_decl (const decl_base_sptr &d)
 Test if a declaration is a scope_decl.
 
array_type_def::subrange_typeis_subrange_type (const type_or_decl_base *type)
 Test if a type is an array_type_def::subrange_type.
 
array_type_def::subrange_sptr is_subrange_type (const type_or_decl_base_sptr &type)
 Test if a type is an array_type_def::subrange_type.
 
bool is_template_decl (const decl_base_sptr &decl)
 Tests whether a decl is a template.
 
bool is_template_parameter (const shared_ptr< decl_base > decl)
 Tests whether a decl is a template parameter.
 
bool is_template_parm_composition_type (const shared_ptr< decl_base > decl)
 Tests whether a decl is a template parameter composition type.
 
bool is_type (const type_or_decl_base &tod)
 Test whether a declaration is a type.
 
type_baseis_type (const type_or_decl_base *t)
 Test whether a declaration is a type.
 
type_base_sptr is_type (const type_or_decl_base_sptr &tod)
 Test whether a declaration is a type.
 
const type_declis_type_decl (const type_or_decl_base *t)
 Test whether a type is a type_decl (a builtin type).
 
type_decl_sptr is_type_decl (const type_or_decl_base_sptr &t)
 Test whether a type is a type_decl (a builtin type).
 
const typedef_declis_typedef (const type_base *t)
 Test whether a type is a typedef.
 
const typedef_declis_typedef (const type_or_decl_base *t)
 Test whether a type is a typedef.
 
typedef_decl_sptr is_typedef (const type_or_decl_base_sptr t)
 Test whether a type is a typedef.
 
typedef_declis_typedef (type_base *t)
 Test whether a type is a typedef.
 
array_type_def_sptr is_typedef_of_array (const type_base_sptr &t)
 Test if a type is a typedef of an array.
 
bool is_typedef_of_maybe_qualified_class_or_union_type (const type_base *t)
 Test if a type is a typedef of a class or union type, or a typedef of a qualified class or union type.
 
bool is_typedef_of_maybe_qualified_class_or_union_type (const type_base_sptr &t)
 Test if a type is a typedef of a class or union type, or a typedef of a qualified class or union type.
 
bool is_typedef_ptr_or_ref_to_decl_only_class_or_union_type (const type_base *t)
 Test if a type is a typedef, pointer or reference to a decl-only class/union.
 
union_decl_sptr is_union_type (const shared_ptr< type_or_decl_base > &t)
 Test if a type is a union_decl.
 
bool is_union_type (const type_or_decl_base &t)
 Test if a type is a union_decl.
 
union_declis_union_type (const type_or_decl_base *t)
 Test if a type is a union_decl.
 
bool is_unique_type (const type_base *t)
 Test if a type is unique in the entire environment.
 
bool is_unique_type (const type_base_sptr &t)
 Test if a type is unique in the entire environment.
 
bool is_user_defined_type (const type_base *t)
 Test if a type is user-defined.
 
bool is_user_defined_type (const type_base_sptr &t)
 Test if a type is user-defined.
 
var_declis_var_decl (const type_or_decl_base *tod)
 Tests if a declaration is a variable declaration.
 
var_decl_sptr is_var_decl (const type_or_decl_base_sptr &decl)
 Tests if a declaration is a variable declaration.
 
const type_baseis_void_pointer_type (const type_base *t)
 Test if a type is a pointer to void type.
 
const type_base_sptr is_void_pointer_type (const type_base_sptr &t)
 Test if a type is a pointer to void type.
 
const type_baseis_void_pointer_type_equivalent (const type_base &type)
 Test if a type is equivalent to a pointer to void type.
 
const type_baseis_void_pointer_type_equivalent (const type_base *type)
 Test if a type is equivalent to a pointer to void type.
 
void keep_type_alive (type_base_sptr t)
 Make sure that the life time of a given (smart pointer to a) type is the same as the life time of the libabigail library.
 
decl_base_sptr look_through_decl_only (const decl_base &d)
 If a decl is decl-only get its definition. Otherwise, just return nil.
 
decl_base_sptr look_through_decl_only (const decl_base_sptr &d)
 If a decl is decl-only get its definition. Otherwise, just return nil.
 
decl_baselook_through_decl_only (decl_base *d)
 If a decl is decl-only enum, get its definition. Otherwise, just return the initial decl.
 
class_or_unionlook_through_decl_only_class (class_or_union *the_class)
 If a class (or union) is a decl-only class, get its definition. Otherwise, just return the initial class.
 
class_or_union_sptr look_through_decl_only_class (class_or_union_sptr klass)
 If a class (or union) is a decl-only class, get its definition. Otherwise, just return the initial class.
 
class_or_union_sptr look_through_decl_only_class (const class_or_union &the_class)
 If a class (or union) is a decl-only class, get its definition. Otherwise, just return the initial class.
 
enum_type_decl_sptr look_through_decl_only_enum (const enum_type_decl &the_enum)
 If an enum is a decl-only enum, get its definition. Otherwise, just return the initial enum.
 
enum_type_decl_sptr look_through_decl_only_enum (enum_type_decl_sptr enom)
 If an enum is a decl-only enum, get its definition. Otherwise, just return the initial enum.
 
type_base_sptr look_through_decl_only_type (const type_base_sptr &t)
 If a type is is decl-only, then get its definition. Otherwise, just return the initial type.
 
type_baselook_through_decl_only_type (type_base *t)
 If a type is is decl-only, then get its definition. Otherwise, just return the initial type.
 
array_type_def_sptr lookup_array_type (const array_type_def &t, const corpus &corp)
 Look into a given corpus to find an array type which has a given qualified name.
 
array_type_def_sptr lookup_array_type (const interned_string &qualified_name, const corpus &corp)
 Look into a given corpus to find an array type which has the same qualified name as a given array type.
 
array_type_def_sptr lookup_array_type (const interned_string &type_name, const translation_unit &tu)
 Lookup an array type from a translation unit.
 
type_decl_sptr lookup_basic_type (const interned_string &qualified_name, const corpus &corp)
 Look into a given corpus to find a basic type which has a given qualified name.
 
type_decl_sptr lookup_basic_type (const interned_string &type_name, const translation_unit &tu)
 Lookup a basic type from a translation unit.
 
type_decl_sptr lookup_basic_type (const string &qualified_name, const corpus &corp)
 Look into a given corpus to find a basic type which has a given qualified name.
 
type_decl_sptr lookup_basic_type (const string &type_name, const translation_unit &tu)
 Lookup a basic type from a translation unit.
 
type_decl_sptr lookup_basic_type (const type_decl &t, const corpus &corp)
 Look into a given corpus to find a type which has the same qualified name as a giventype.
 
type_decl_sptr lookup_basic_type_per_location (const interned_string &loc, const corpus &corp)
 Lookup a type_decl type from a given corpus, by its location.
 
type_decl_sptr lookup_basic_type_per_location (const string &loc, const corpus &corp)
 Lookup a type_decl type from a given corpus, by its location.
 
type_base_sptr lookup_class_or_typedef_type (const string &qualified_name, const corpus &corp)
 Look into a corpus to find a class, union or typedef type which has a given qualified name.
 
class_decl_sptr lookup_class_type (const class_decl &t, const corpus &corp)
 Look into a given corpus to find a class type which has the same qualified name as a given type.
 
class_decl_sptr lookup_class_type (const interned_string &qualified_name, const corpus &corp)
 Look into a given corpus to find a class type which has a given qualified name.
 
class_decl_sptr lookup_class_type (const interned_string &type_name, const translation_unit &tu)
 Lookup a class type from a translation unit.
 
class_decl_sptr lookup_class_type (const string &fqn, const translation_unit &tu)
 Lookup a class type from a translation unit.
 
class_decl_sptr lookup_class_type (const string &qualified_name, const corpus &corp)
 Look into a given corpus to find a class type which has a given qualified name.
 
class_decl_sptr lookup_class_type_per_location (const interned_string &loc, const corpus &corp)
 Look up a class_decl from a given corpus by its location.
 
class_decl_sptr lookup_class_type_per_location (const string &loc, const corpus &corp)
 Look up a class_decl from a given corpus by its location.
 
class_decl_sptr lookup_class_type_through_scopes (const list< string > &fqn, const translation_unit &tu)
 Lookup a class type from a translation unit by walking its scopes in sequence and by looking into them.
 
type_base_sptr lookup_class_typedef_or_enum_type (const string &qualified_name, const corpus &corp)
 Look into a corpus to find a class, typedef or enum type which has a given qualified name.
 
const type_base_wptrs_typelookup_class_types (const interned_string &qualified_name, const corpus &corp)
 Look into a given corpus to find the class type*s* that have a given qualified name.
 
const type_base_wptrs_typelookup_class_types (const string &qualified_name, const corpus &corp)
 Look into a given corpus to find the class type*s* that have a given qualified name.
 
const var_decllookup_data_member (const type_base *type, const char *dm_name)
 Look for a data member of a given class, struct or union type and return it.
 
const var_decl_sptr lookup_data_member (const type_base_sptr &type, const var_decl_sptr &dm)
 Look for a data member of a given class, struct or union type and return it.
 
bool lookup_decl_only_class_types (const interned_string &qualified_name, const corpus &corp, type_base_wptrs_type &result)
 Look into a given corpus to find the class type*s* that have a given qualified name and that are declaration-only.
 
enum_type_decl_sptr lookup_enum_type (const enum_type_decl &t, const corpus &corp)
 Look into a given corpus to find an enum type which has the same qualified name as a given enum type.
 
enum_type_decl_sptr lookup_enum_type (const interned_string &qualified_name, const corpus &corp)
 Look into a given corpus to find an enum type which has a given qualified name.
 
enum_type_decl_sptr lookup_enum_type (const interned_string &type_name, const translation_unit &tu)
 Lookup an enum type from a translation unit.
 
enum_type_decl_sptr lookup_enum_type (const string &qualified_name, const corpus &corp)
 Look into a given corpus to find an enum type which has a given qualified name.
 
enum_type_decl_sptr lookup_enum_type (const string &type_name, const translation_unit &tu)
 Lookup an enum type from a translation unit.
 
enum_type_decl_sptr lookup_enum_type_per_location (const interned_string &loc, const corpus &corp)
 Look up an enum_type_decl from a given corpus, by its location.
 
enum_type_decl_sptr lookup_enum_type_per_location (const string &loc, const corpus &corp)
 Look up an enum_type_decl from a given corpus, by its location.
 
const type_base_wptrs_typelookup_enum_types (const interned_string &qualified_name, const corpus &corp)
 Look into a given corpus to find the enum type*s* that have a given qualified name.
 
const type_base_wptrs_typelookup_enum_types (const string &qualified_name, const corpus &corp)
 Look into a given corpus to find the enum type*s* that have a given qualified name.
 
function_type_sptr lookup_function_type (const function_type &t, const corpus &corp)
 Look into a given corpus to find a function type which has the same qualified name as a given function type.
 
function_type_sptr lookup_function_type (const function_type &t, const translation_unit &tu)
 Lookup a function type from a translation unit.
 
function_type_sptr lookup_function_type (const function_type_sptr &fn_t, const corpus &corpus)
 Look into a given corpus to find a function type which has the same qualified name as a given function type.
 
function_type_sptr lookup_function_type (const function_type_sptr &t, const translation_unit &tu)
 Lookup a function type from a translation unit.
 
function_type_sptr lookup_function_type (const interned_string &qualified_name, const corpus &corp)
 Look into a given corpus to find a function type which has a given qualified name.
 
function_type_sptr lookup_function_type (const interned_string &type_name, const translation_unit &tu)
 Lookup a function type from a translation unit.
 
function_type_sptr lookup_or_synthesize_fn_type (const function_type_sptr &fn_t, const corpus &corpus)
 Look into an ABI corpus for a function type.
 
pointer_type_def_sptr lookup_pointer_type (const interned_string &qualified_name, const corpus &corp)
 Look into a given corpus to find a pointer type which has a given qualified name.
 
pointer_type_def_sptr lookup_pointer_type (const interned_string &type_name, const translation_unit &tu)
 Lookup a pointer type from a translation unit.
 
pointer_type_def_sptr lookup_pointer_type (const pointer_type_def &t, const corpus &corp)
 Look into a given corpus to find a pointer type which has the same qualified name as a given pointer type.
 
pointer_type_def_sptr lookup_pointer_type (const string &type_name, const translation_unit &tu)
 Lookup a pointer type from a translation unit.
 
pointer_type_def_sptr lookup_pointer_type (const type_base_sptr &pointed_to_type, const translation_unit &tu)
 Lookup a pointer type from a translation unit.
 
qualified_type_def_sptr lookup_qualified_type (const interned_string &qualified_name, const corpus &corp)
 Look into a given corpus to find a qualified type which has a given qualified name.
 
qualified_type_def_sptr lookup_qualified_type (const interned_string &type_name, const translation_unit &tu)
 Lookup a qualified type from a translation unit.
 
qualified_type_def_sptr lookup_qualified_type (const qualified_type_def &t, const corpus &corp)
 Look into a given corpus to find a qualified type which has the same qualified name as a given type.
 
qualified_type_def_sptr lookup_qualified_type (const type_base_sptr &underlying_type, qualified_type_def::CV quals, const translation_unit &tu)
 Lookup a qualified type from a translation unit.
 
reference_type_def_sptr lookup_reference_type (const interned_string &qualified_name, const corpus &corp)
 Look into a given corpus to find a reference type which has a given qualified name.
 
reference_type_def_sptr lookup_reference_type (const interned_string &type_name, const translation_unit &tu)
 Lookup a reference type from a translation unit.
 
reference_type_def_sptr lookup_reference_type (const reference_type_def &t, const corpus &corp)
 Look into a given corpus to find a reference type which has the same qualified name as a given reference type.
 
const reference_type_def_sptr lookup_reference_type (const type_base_sptr &pointed_to_type, bool lvalue_reference, const translation_unit &tu)
 Lookup a reference type from a translation unit.
 
const type_base_sptr lookup_type (const interned_string &fqn, const translation_unit &tu)
 Lookup a type in a translation unit.
 
type_base_sptr lookup_type (const interned_string &n, const corpus &corp)
 Look into a given corpus to find a type which has a given qualified name.
 
type_base_sptr lookup_type (const string &fqn, const translation_unit &tu)
 Lookup a type in a translation unit, starting from the global namespace.
 
type_base_sptr lookup_type (const type_base &t, const corpus &corp)
 Look into a given corpus to find a type.
 
type_base_sptr lookup_type (const type_base_sptr &t, const corpus &corp)
 Look into a given corpus to find a type.
 
const type_base_sptr lookup_type (const type_base_sptr type, const translation_unit &tu)
 Lookup a type from a translation unit.
 
type_base_sptr lookup_type_from_translation_unit (const string &type_name, const string &tu_path, const corpus &corp)
 Lookup a type from a given translation unit present in a give corpus.
 
const type_base_sptr lookup_type_in_scope (const list< string > &comps, const scope_decl_sptr &scope)
 lookup a type in a scope.
 
const type_base_sptr lookup_type_in_scope (const string &fqn, const scope_decl_sptr &skope)
 Lookup a type in a scope.
 
type_base_sptr lookup_type_per_location (const interned_string &loc, const corpus &corp)
 Lookup a type from a corpus, by its location.
 
type_base_sptr lookup_type_through_scopes (const list< string > &fqn, const translation_unit &tu)
 Lookup a type from a translation unit by walking its scopes in sequence and by looking into them.
 
const type_base_sptr lookup_type_through_scopes (const type_base_sptr type, const translation_unit &tu)
 Lookup a type from a translation unit by walking the scopes of the translation unit in sequence and looking into them.
 
type_base_sptr lookup_type_through_translation_units (const string &qn, const corpus &abi_corpus)
 Lookup a type definition in all the translation units of a given ABI corpus.
 
typedef_decl_sptr lookup_typedef_type (const interned_string &qualified_name, const corpus &corp)
 Look into a given corpus to find a typedef type which has a given qualified name.
 
typedef_decl_sptr lookup_typedef_type (const interned_string &type_name, const translation_unit &tu)
 Lookup a typedef type from a translation unit.
 
typedef_decl_sptr lookup_typedef_type (const string &qualified_name, const corpus &corp)
 Look into a given corpus to find a typedef type which has the same qualified name as a given typedef type.
 
typedef_decl_sptr lookup_typedef_type (const string &type_name, const translation_unit &tu)
 Lookup a typedef type from a translation unit.
 
typedef_decl_sptr lookup_typedef_type (const typedef_decl &t, const corpus &corp)
 Look into a given corpus to find a typedef type which has the same qualified name as a given typedef type.
 
typedef_decl_sptr lookup_typedef_type_per_location (const interned_string &loc, const corpus &corp)
 Lookup a typedef_decl from a corpus, by its location.
 
typedef_decl_sptr lookup_typedef_type_per_location (const string &loc, const corpus &corp)
 Lookup a typedef_decl from a corpus, by its location.
 
union_decl_sptr lookup_union_type (const interned_string &type_name, const corpus &corp)
 Look into a given corpus to find a union type which has a given qualified name.
 
union_decl_sptr lookup_union_type (const interned_string &type_name, const translation_unit &tu)
 Lookup a union type from a translation unit.
 
union_decl_sptr lookup_union_type (const string &fqn, const translation_unit &tu)
 Lookup a union type from a translation unit.
 
union_decl_sptr lookup_union_type (const string &type_name, const corpus &corp)
 Look into a given corpus to find a union type which has a given qualified name.
 
union_decl_sptr lookup_union_type_per_location (const interned_string &loc, const corpus &corp)
 Lookup a union type in a given corpus, from its location.
 
union_decl_sptr lookup_union_type_per_location (const string &loc, const corpus &corp)
 Lookup a union type in a given corpus, from its location.
 
const type_base_wptrs_typelookup_union_types (const interned_string &qualified_name, const corpus &corp)
 Look into a given corpus to find the union type*s* that have a given qualified name.
 
const type_base_wptrs_typelookup_union_types (const string &qualified_name, const corpus &corp)
 Look into a given corpus to find the union types that have a given qualified name.
 
const decl_base_sptr lookup_var_decl_in_scope (const std::list< string > &comps, const scope_decl_sptr &skope)
 lookup a var_decl in a scope.
 
const decl_base_sptr lookup_var_decl_in_scope (const string &fqn, const scope_decl_sptr &skope)
 Lookup a var_decl in a scope.
 
template<>
void mark_types_as_being_compared (const class_decl &l, const class_decl &r)
 Mark a pair of class_decl types as being compared.
 
template<typename T >
void mark_types_as_being_compared (T &l, T &r)
 Mark a pair of types as being compared.
 
bool maybe_compare_as_member_decls (const decl_base &l, const decl_base &r, change_kind *k)
 Compare the properties that belong to the "is-a-member-relation" of a decl.
 
template<typename T >
T * maybe_get_canonical_type (T *t)
 Get the canonical type of a given type T* as a T*.
 
void maybe_update_types_lookup_map (const array_type_def::subrange_sptr &subrange_type)
 Update the map that associates the fully qualified name of a type with the type itself.
 
void maybe_update_types_lookup_map (const array_type_def_sptr &array_type)
 Update the map that associates the fully qualified name of a type with the type itself.
 
void maybe_update_types_lookup_map (const class_decl_sptr &class_type)
 Update the map that associates the fully qualified name of a class type with the type itself.
 
void maybe_update_types_lookup_map (const decl_base_sptr &decl)
 Update the map that associates the fully qualified name of a type declaration with the type itself.
 
void maybe_update_types_lookup_map (const enum_type_decl_sptr &enum_type)
 Update the map that associates the fully qualified name of an enum type with the type itself.
 
void maybe_update_types_lookup_map (const function_type_sptr &fn_type)
 Update the map that associates the fully qualified name of a function type with the type itself.
 
void maybe_update_types_lookup_map (const pointer_type_def_sptr &pointer_type)
 Update the map that associates the fully qualified name of a pointer type with the type itself.
 
void maybe_update_types_lookup_map (const ptr_to_mbr_type_sptr &ptr_to_member)
 Update the map that associates the fully qualified name of a pointer-to-member type with the type itself.
 
void maybe_update_types_lookup_map (const qualified_type_def_sptr &qualified_type)
 Update the map that associates the fully qualified name of a qualified type with the type itself.
 
void maybe_update_types_lookup_map (const reference_type_def_sptr &reference_type)
 Update the map that associates the fully qualified name of a reference type with the type itself.
 
template<typename TypeKind >
bool maybe_update_types_lookup_map (const shared_ptr< TypeKind > &type, istring_type_base_wptrs_map_type &types_map, bool use_type_name_as_key=true)
 Update the map that associates a fully qualified name of a given type to that type.
 
void maybe_update_types_lookup_map (const type_base_sptr &type)
 Update the map that associates the fully qualified name of a type with the type itself.
 
void maybe_update_types_lookup_map (const type_decl_sptr &basic_type)
 Update the map that associates the fully qualified name of a basic type with the type itself.
 
void maybe_update_types_lookup_map (const typedef_decl_sptr &typedef_type)
 Update the map that associates the fully qualified name of a typedef type with the type itself.
 
void maybe_update_types_lookup_map (const union_decl_sptr &union_type)
 Update the map that associates the fully qualified name of a union type with the type itself.
 
template<>
bool maybe_update_types_lookup_map< class_decl > (const class_decl_sptr &class_type, istring_type_base_wptrs_map_type &map, bool use_type_name_as_key)
 This is the specialization for type class_decl of the function template:
 
template<>
bool maybe_update_types_lookup_map< function_type > (const function_type_sptr &type, istring_type_base_wptrs_map_type &types_map, bool)
 This is the specialization for type function_type of the function template:
 
bool member_function_has_vtable_offset (const function_decl &f)
 Test if a virtual member function has a vtable offset set.
 
bool odr_is_relevant (const type_or_decl_base &artifact)
 By looking at the language of the TU a given ABI artifact belongs to, test if the ONE Definition Rule should apply.
 
bool operator!= (const class_decl::base_spec_sptr &l, const class_decl::base_spec_sptr &r)
 Inequality operator for smart pointers to class_decl::base_specs.
 
bool operator!= (const class_decl_sptr &l, const class_decl_sptr &r)
 Turn inequality of shared_ptr of class_decl into a deep equality; that is, make it compare the pointed to objects too.
 
bool operator!= (const class_or_union_sptr &l, const class_or_union_sptr &r)
 Turn inequality of shared_ptr of class_or_union into a deep equality; that is, make it compare the pointed to objects too.
 
bool operator!= (const decl_base_sptr &l, const decl_base_sptr &r)
 Inequality operator of shared_ptr of decl_base.
 
bool operator!= (const elf_symbol_sptr &lhs, const elf_symbol_sptr &rhs)
 Inequality operator for smart pointers to elf_symbol.
 
bool operator!= (const enum_type_decl_sptr &l, const enum_type_decl_sptr &r)
 Inequality operator for enum_type_decl_sptr.
 
bool operator!= (const function_decl::parameter_sptr &l, const function_decl::parameter_sptr &r)
 Non-member inequality operator for function_decl::parameter.
 
bool operator!= (const function_decl_sptr &l, const function_decl_sptr &r)
 A deep inequality operator for smart pointers to functions.
 
bool operator!= (const member_class_template_sptr &l, const member_class_template_sptr &r)
 Inequality operator for the member_class_template type.
 
bool operator!= (const member_function_template_sptr &l, const member_function_template_sptr &r)
 Inequality operator for smart pointers to member_function_template. This is compares the pointed-to instances.
 
bool operator!= (const method_decl_sptr &l, const method_decl_sptr &r)
 Inequality operator for method_decl_sptr.
 
bool operator!= (const pointer_type_def_sptr &l, const pointer_type_def_sptr &r)
 Turn inequality of shared_ptr of pointer_type_def into a deep equality; that is, make it compare the pointed to objects too.
 
bool operator!= (const qualified_type_def_sptr &l, const qualified_type_def_sptr &r)
 Non-member inequality operator for qualified_type_def.
 
bool operator!= (const reference_type_def_sptr &l, const reference_type_def_sptr &r)
 Turn inequality of shared_ptr of reference_type_def into a deep equality; that is, make it compare the pointed to objects too.
 
bool operator!= (const scope_decl_sptr &l, const scope_decl_sptr &r)
 Inequality operator for scope_decl_sptr.
 
bool operator!= (const translation_unit_sptr &l, const translation_unit_sptr &r)
 A deep inequality operator for pointers to translation units.
 
bool operator!= (const type_base_sptr &l, const type_base_sptr &r)
 Turn inequality of shared_ptr of type_base into a deep equality; that is, make it compare the pointed to objects..
 
bool operator!= (const type_decl_sptr &l, const type_decl_sptr &r)
 Inequality operator for type_decl_sptr.
 
bool operator!= (const type_or_decl_base_sptr &l, const type_or_decl_base_sptr &r)
 Non-member inequality operator for the @type_or_decl_base type.
 
bool operator!= (const union_decl_sptr &l, const union_decl_sptr &r)
 Turn inequality of shared_ptr of union_decl into a deep equality; that is, make it compare the pointed to objects too.
 
bool operator!= (const std::string &l, const interned_string &r)
 
change_kind operator& (change_kind l, change_kind r)
 
qualified_type_def::CV operator& (qualified_type_def::CV lhs, qualified_type_def::CV rhs)
 Overloaded bitwise AND operator for CV qualifiers.
 
real_type::modifiers_type operator& (real_type::modifiers_type l, real_type::modifiers_type r)
 Bitwise AND operator for real_type::modifiers_type.
 
type_or_decl_base::type_or_decl_kind operator& (type_or_decl_base::type_or_decl_kind l, type_or_decl_base::type_or_decl_kind r)
 bitwise "AND" operator for the type_or_decl_base::type_or_decl_kind bitmap type.
 
change_kindoperator&= (change_kind &l, change_kind r)
 
qualified_type_def::CVoperator&= (qualified_type_def::CV &l, qualified_type_def::CV r)
 Overloaded bitwise &= operator for cv qualifiers.
 
real_type::modifiers_typeoperator&= (real_type::modifiers_type &l, real_type::modifiers_type r)
 Bitwise &= operator for real_type::modifiers_type.
 
type_or_decl_base::type_or_decl_kindoperator&= (type_or_decl_base::type_or_decl_kind &l, type_or_decl_base::type_or_decl_kind r)
 bitwise "A&=" operator for the type_or_decl_base::type_or_decl_kind bitmap type.
 
std::string operator+ (const interned_string &s1, const std::string &s2)
 Concatenation operator.
 
std::string operator+ (const std::string &s1, const interned_string &s2)
 Concatenation operator.
 
std::ostream & operator<< (std::ostream &o, access_specifier a)
 Streaming operator for class_decl::access_specifier.
 
std::ostream & operator<< (std::ostream &o, decl_base::binding b)
 Streaming operator for decl_base::binding.
 
std::ostream & operator<< (std::ostream &o, decl_base::visibility v)
 Streaming operator for the decl_base::visibility.
 
std::ostream & operator<< (std::ostream &o, elf_symbol::binding b)
 Serialize an instance of symbol_binding and stream it to a given output stream.
 
std::ostream & operator<< (std::ostream &o, elf_symbol::type t)
 Serialize an instance of symbol_type and stream it to a given output stream.
 
std::ostream & operator<< (std::ostream &o, elf_symbol::visibility v)
 Serialize an instance of elf_symbol::visibility and stream it to a given output stream.
 
std::ostream & operator<< (std::ostream &o, qualified_type_def::CV cv)
 Streaming operator for qualified_type_decl::CV.
 
std::ostream & operator<< (std::ostream &o, const interned_string &s)
 Streaming operator.
 
bool operator== (const class_decl::base_spec_sptr &l, const class_decl::base_spec_sptr &r)
 Equality operator for smart pointers to class_decl::base_specs.
 
bool operator== (const class_decl_sptr &l, const class_decl_sptr &r)
 Turn equality of shared_ptr of class_decl into a deep equality; that is, make it compare the pointed to objects too.
 
bool operator== (const class_or_union_sptr &l, const class_or_union_sptr &r)
 Turn equality of shared_ptr of class_or_union into a deep equality; that is, make it compare the pointed to objects too.
 
bool operator== (const decl_base_sptr &l, const decl_base_sptr &r)
 Turn equality of shared_ptr of decl_base into a deep equality; that is, make it compare the pointed to objects, not just the pointers.
 
bool operator== (const elf_symbol_sptr &lhs, const elf_symbol_sptr &rhs)
 Equality operator for smart pointers to elf_symbol.
 
bool operator== (const enum_type_decl_sptr &l, const enum_type_decl_sptr &r)
 Equality operator for enum_type_decl_sptr.
 
bool operator== (const function_decl::parameter_sptr &l, const function_decl::parameter_sptr &r)
 Non-member equality operator for function_decl::parameter.
 
bool operator== (const function_decl_sptr &l, const function_decl_sptr &r)
 A deep comparison operator for a shared pointer to function_decl.
 
bool operator== (const member_class_template_sptr &l, const member_class_template_sptr &r)
 Comparison operator for the member_class_template type.
 
bool operator== (const member_function_template_sptr &l, const member_function_template_sptr &r)
 Equality operator for smart pointers to member_function_template. This is compares the pointed-to instances.
 
bool operator== (const method_decl_sptr &l, const method_decl_sptr &r)
 Equality operator for method_decl_sptr.
 
bool operator== (const pointer_type_def_sptr &l, const pointer_type_def_sptr &r)
 Turn equality of shared_ptr of pointer_type_def into a deep equality; that is, make it compare the pointed to objects too.
 
bool operator== (const qualified_type_def_sptr &l, const qualified_type_def_sptr &r)
 Non-member equality operator for qualified_type_def.
 
bool operator== (const reference_type_def_sptr &l, const reference_type_def_sptr &r)
 Turn equality of shared_ptr of reference_type_def into a deep equality; that is, make it compare the pointed to objects too.
 
bool operator== (const scope_decl_sptr &l, const scope_decl_sptr &r)
 Equality operator for scope_decl_sptr.
 
bool operator== (const translation_unit_sptr &l, const translation_unit_sptr &r)
 A deep comparison operator for pointers to translation units.
 
bool operator== (const type_base_sptr &l, const type_base_sptr &r)
 Turn equality of shared_ptr of type_base into a deep equality; that is, make it compare the pointed to objects too.
 
bool operator== (const type_decl_sptr &l, const type_decl_sptr &r)
 Equality operator for type_decl_sptr.
 
bool operator== (const type_or_decl_base &lr, const type_or_decl_base &rr)
 Non-member equality operator for the @type_or_decl_base type.
 
bool operator== (const type_or_decl_base_sptr &l, const type_or_decl_base_sptr &r)
 Non-member equality operator for the @type_or_decl_base type.
 
bool operator== (const union_decl_sptr &l, const union_decl_sptr &r)
 Turn equality of shared_ptr of union_decl into a deep equality; that is, make it compare the pointed to objects too.
 
bool operator== (const std::string &l, const interned_string &r)
 Equality operator.
 
change_kind operator| (change_kind l, change_kind r)
 
qualified_type_def::CV operator| (qualified_type_def::CV lhs, qualified_type_def::CV rhs)
 Overloaded bitwise OR operator for cv qualifiers.
 
real_type::modifiers_type operator| (real_type::modifiers_type l, real_type::modifiers_type r)
 Bitwise OR operator for real_type::modifiers_type.
 
type_or_decl_base::type_or_decl_kind operator| (type_or_decl_base::type_or_decl_kind l, type_or_decl_base::type_or_decl_kind r)
 bitwise "OR" operator for the type_or_decl_base::type_or_decl_kind bitmap type.
 
change_kindoperator|= (change_kind &l, change_kind r)
 
qualified_type_def::CVoperator|= (qualified_type_def::CV &l, qualified_type_def::CV r)
 Overloaded bitwise |= operator for cv qualifiers.
 
real_type::modifiers_typeoperator|= (real_type::modifiers_type &l, real_type::modifiers_type r)
 Bitwise |= operator for real_type::modifiers_type.
 
type_or_decl_base::type_or_decl_kindoperator|= (type_or_decl_base::type_or_decl_kind &l, type_or_decl_base::type_or_decl_kind r)
 bitwise "|=" operator for the type_or_decl_base::type_or_decl_kind bitmap type.
 
qualified_type_def::CV operator~ (qualified_type_def::CV q)
 Overloaded bitwise inverting operator for CV qualifiers.
 
real_type::modifiers_type operator~ (real_type::modifiers_type l)
 Bitwise one's complement operator for real_type::modifiers_type.
 
bool parse_real_type (const string &str, real_type &type)
 Parse a real type from a string.
 
hash_t peek_hash_value (const type_or_decl_base &artefact)
 Get the hash value associated to an IR node.
 
const type_basepeel_array_type (const type_base *type)
 Return the leaf element type of an array.
 
const type_base_sptr peel_array_type (const type_base_sptr &type)
 Return the leaf element type of an array.
 
type_base_sptr peel_const_qualified_type (const qualified_type_def_sptr &q)
 If a qualified type is const, then return its underlying type.
 
type_basepeel_pointer_or_reference_type (const type_base *type, bool peel_qual_type)
 Return the leaf underlying or pointed-to type node of a, pointer_type_def, reference_type_def or qualified_type_def type node.
 
const type_basepeel_pointer_type (const type_base *type)
 Return the leaf pointed-to type node of a pointer_type_def node.
 
type_base_sptr peel_pointer_type (const type_base_sptr &type)
 Return the leaf pointed-to type node of a pointer_type_def node.
 
type_basepeel_qualified_or_typedef_type (const type_base *type)
 Return the leaf underlying type of a qualified or typedef type.
 
type_base_sptr peel_qualified_or_typedef_type (const type_base_sptr &t)
 Return the leaf underlying type of a qualified or typedef type.
 
const type_basepeel_qualified_type (const type_base *type)
 Return the leaf underlying type of a qualified type.
 
const type_base_sptr peel_qualified_type (const type_base_sptr &type)
 Return the leaf underlying type of a qualified type.
 
const type_basepeel_reference_type (const type_base *type)
 Return the leaf pointed-to type node of a reference_type_def node.
 
type_base_sptr peel_reference_type (const type_base_sptr &type)
 Return the leaf pointed-to type node of a reference_type_def node.
 
type_basepeel_typedef_pointer_or_reference_type (const type_base *type)
 Return the leaf underlying or pointed-to type node of a typedef_decl, pointer_type_def or reference_type_def node.
 
type_basepeel_typedef_pointer_or_reference_type (const type_base *type, bool peel_qual_type)
 Return the leaf underlying or pointed-to type node of a typedef_decl, pointer_type_def or reference_type_def node.
 
type_base_sptr peel_typedef_pointer_or_reference_type (const type_base_sptr type)
 Return the leaf underlying or pointed-to type node of a typedef_decl, pointer_type_def, reference_type_def, or array_type_def node.
 
const type_basepeel_typedef_type (const type_base *type)
 Return the leaf underlying type node of a typedef_decl node.
 
type_base_sptr peel_typedef_type (const type_base_sptr &type)
 Return the leaf underlying type node of a typedef_decl node.
 
void pop_composite_type_comparison_operands (const type_base &left, const type_base &right)
 Pop a pair of operands from the stack of operands to the current type comparison.
 
void push_composite_type_comparison_operands (const type_base &left, const type_base &right)
 Push a pair of operands on the stack of operands of the current type comparison, during type canonicalization.
 
void remove_decl_from_scope (decl_base_sptr decl)
 Remove a given decl from its scope.
 
template<typename T >
bool return_comparison_result (T &l, T &r, bool value)
 Return the result of the comparison of two (sub) types.
 
void set_data_member_is_laid_out (var_decl_sptr m, bool l)
 Set a flag saying if a data member is laid out.
 
void set_data_member_offset (var_decl_sptr m, uint64_t o)
 Set the offset of a data member into its containing class.
 
void set_member_access_specifier (const decl_base_sptr &d, access_specifier a)
 Sets the access specifier for a class member.
 
void set_member_access_specifier (decl_base &d, access_specifier a)
 Sets the access specifier for a class member.
 
void set_member_function_is_const (const function_decl_sptr &f, bool is_const)
 set the const-ness property of a member function.
 
void set_member_function_is_const (function_decl &f, bool is_const)
 set the const-ness property of a member function.
 
void set_member_function_is_ctor (const function_decl_sptr &f, bool c)
 Setter for the is_ctor property of the member function.
 
void set_member_function_is_ctor (function_decl &f, bool c)
 Setter for the is_ctor property of the member function.
 
void set_member_function_is_dtor (const function_decl_sptr &f, bool d)
 Set the destructor-ness property of a member function.
 
void set_member_function_is_dtor (function_decl &f, bool d)
 Set the destructor-ness property of a member function.
 
void set_member_function_virtuality (const function_decl_sptr &fn, bool is_virtual, ssize_t voffset)
 Set the virtual-ness of a member fcuntion.
 
void set_member_function_virtuality (function_decl &fn, bool is_virtual, ssize_t voffset)
 Set the virtual-ness of a member fcuntion.
 
void set_member_function_virtuality (function_decl *fn, bool is_virtual, ssize_t voffset)
 Set the virtual-ness of a member fcuntion.
 
void set_member_is_static (const decl_base_sptr &d, bool s)
 Sets the static-ness property of a class member.
 
void set_member_is_static (decl_base &d, bool s)
 Sets the static-ness property of a class member.
 
void sort_types (const canonical_type_sptr_set_type &types, vector< type_base_sptr > &result)
 Sort types in a hopefully stable manner.
 
void sort_types_for_hash_computing_and_c14n (vector< type_base_sptr > &types)
 Sort types right before hashing and canonicalizing them.
 
bool string_to_elf_symbol_binding (const string &s, elf_symbol::binding &b)
 Convert a string representing a an elf symbol binding into an elf_symbol::binding.
 
bool string_to_elf_symbol_type (const string &s, elf_symbol::type &t)
 Convert a string representing a symbol type into an elf_symbol::type.
 
bool string_to_elf_symbol_visibility (const string &s, elf_symbol::visibility &v)
 Convert a string representing a an elf symbol visibility into an elf_symbol::visibility.
 
translation_unit::language string_to_translation_unit_language (const string &l)
 Parse a string representing a language into a translation_unit::language enumerator into a string.
 
void strip_redundant_quals_from_underyling_types (const qualified_type_def_sptr &t)
 Merge redundant qualifiers from a tree of qualified types.
 
type_base_sptr strip_typedef (const type_base_sptr type)
 Recursively returns the the underlying type of a typedef. The return type should not be a typedef of anything anymore.
 
decl_base_sptr strip_useless_const_qualification (const qualified_type_def_sptr t)
 Strip qualification from a qualified type, when it makes sense.
 
function_type_sptr synthesize_function_type_from_translation_unit (const function_type &fn_type, translation_unit &tu)
 In a translation unit, lookup the sub-types that make up a given function type and if the sub-types are all found, synthesize and return a function_type with them.
 
type_base_sptr synthesize_type_from_translation_unit (const type_base_sptr &type, translation_unit &tu)
 In a translation unit, lookup a given type or synthesize it if it's a qualified type.
 
string translation_unit_language_to_string (translation_unit::language l)
 Converts a translation_unit::language enumerator into a string.
 
template<typename T >
bool try_canonical_compare (const T *l, const T *r)
 Compare two types by comparing their canonical types if present.
 
type_basetype_has_non_canonicalized_subtype (type_base_sptr t)
 Test if a type has sub-types that are non-canonicalized.
 
bool type_has_sub_type_changes (const type_base_sptr t_v1, const type_base_sptr t_v2)
 Tests if the change of a given type effectively comes from just its sub-types. That is, if the type has changed but its type name hasn't changed, then the change of the type mostly likely is a sub-type change.
 
bool type_is_suitable_for_hash_computing (const type_base &t)
 Test if we should attempt to compute a hash value for a given type.
 
type_base_sptr type_or_void (const type_base_sptr t, const environment &env)
 Return either the type given in parameter if it's non-null, or the void type.
 
bool type_originates_from_corpus (type_base_sptr t, corpus_sptr &c)
 Test if a type originates from a corpus.
 
bool types_are_compatible (const decl_base_sptr d1, const decl_base_sptr d2)
 Test if two types are equal modulo a typedef.
 
bool types_are_compatible (const type_base_sptr type1, const type_base_sptr type2)
 Test if two types are equal modulo a typedef.
 
bool types_have_similar_structure (const type_base *first, const type_base *second, bool indirect_type)
 Test if two types have similar structures, even though they are (or can be) different.
 
bool types_have_similar_structure (const type_base_sptr &first, const type_base_sptr &second, bool indirect_type)
 Test if two types have similar structures, even though they are (or can be) different.
 
template<>
void unmark_types_as_being_compared (const class_decl &l, const class_decl &r)
 Mark a pair of class_decl types as being not compared anymore.
 
template<typename T >
void unmark_types_as_being_compared (T &l, T &r)
 Mark a pair of types as being not compared anymore.
 
bool var_equals_modulo_types (const var_decl &l, const var_decl &r, change_kind *k)
 Compares two instances of var_decl without taking their type into account.
 

Detailed Description

Definitions for the Internal Representation artifacts of libabigail.

Definition in file abg-ir.cc.

Macro Definition Documentation

◆ ABG_RETURN

#define ABG_RETURN ( value)

Definition at line 877 of file abg-ir.cc.

◆ ABG_RETURN_EQUAL

#define ABG_RETURN_EQUAL ( l,
r )

Definition at line 878 of file abg-ir.cc.

◆ ABG_RETURN_FALSE

#define ABG_RETURN_FALSE

Definition at line 876 of file abg-ir.cc.

◆ CACHE_AND_RETURN_COMPARISON_RESULT

#define CACHE_AND_RETURN_COMPARISON_RESULT ( value)

Definition at line 1133 of file abg-ir.cc.

◆ CACHE_COMPARISON_RESULT_AND_RETURN

#define CACHE_COMPARISON_RESULT_AND_RETURN ( value)

Cache the result of a comparison between too artifacts (l & r) and return immediately.

Parameters
valuethe value to cache.

Definition at line 1145 of file abg-ir.cc.

◆ RETURN_TRUE_IF_COMPARISON_CYCLE_DETECTED

#define RETURN_TRUE_IF_COMPARISON_CYCLE_DETECTED ( l,
r )

This macro is to be used while comparing composite types that might recursively refer to themselves. Comparing two such types might get us into a cyle.

Practically, if we detect that we are already into comparing 'l' and 'r'; then, this is a cycle. To break the cycle, we assume the result of the comparison is true for now. Comparing the other sub-types of l & r will tell us later if l & r are actually different or not.

In the mean time, returning true from this macro should not be used to propagate the canonical type of 'l' onto 'r' as we don't know yet if l equals r. All the types that depend on l and r can't (and that are in the comparison stack currently) can't have their canonical type propagated either. So this macro disallows canonical type propagation for those types that depend on a recursively defined sub-type for now.

Parameters
lthe left-hand-side operand of the comparison.

Definition at line 1031 of file abg-ir.cc.