libabigail
|
The namespace of the internal representation of ABI artifacts like types and decls. More...
Classes | |
class | array_type_def |
The abstraction of an array type. More... | |
struct | canonical_type_hash |
Functor to hash a canonical type by using its pointer value. More... | |
class | class_decl |
Abstracts a class declaration. More... | |
class | class_or_union |
The base type of class_decl and union_decl. More... | |
class | class_tdecl |
Abstract a class template. More... | |
class | context_rel |
The abstraction of the relationship between an entity and its containing scope (its context). That relationship can carry properties like access rights (if the parent is a class_decl), etc. More... | |
class | corpus |
This is the abstraction of a set of translation units (themselves seen as bundles of unitary abi artefacts like types and decls) bundled together as a corpus. A corpus is thus the Application binary interface of a program, a library or just a set of modules put together. More... | |
class | corpus_group |
Abstraction of a group of corpora. More... | |
class | decl_base |
The base type of all declarations. More... | |
struct | decl_topo_comp |
A functor to sort decls somewhat topologically. That is, types are sorted in a way that makes the ones that are defined "first" to come first. More... | |
class | dm_context_rel |
The abstraction for a data member context relationship. This relates a data member to its parent class. More... | |
class | elf_symbol |
Abstraction of an elf symbol. More... | |
class | enum_type_decl |
Abstracts a declaration for an enum type. More... | |
class | environment |
This is an abstraction of the set of resources necessary to manage several aspects of the internal representations of the Abigail library. More... | |
class | function_decl |
Abstraction for a function declaration. More... | |
class | function_tdecl |
Abstract a function template declaration. More... | |
class | function_type |
Abstraction of a function type. More... | |
class | global_scope |
This abstracts the global scope of a given translation unit. More... | |
class | ir_node_visitor |
The base class for the visitor type hierarchy used for traversing a translation unit. More... | |
struct | ir_traversable_base |
The base of an entity of the intermediate representation that is to be traversed. More... | |
class | location |
The source location of a token. More... | |
class | location_manager |
The entry point to manage locations. More... | |
class | mem_fn_context_rel |
Abstraction of a member function context relationship. This relates a member function to its parent class. More... | |
class | member_base |
The base class for member types, data members and member functions. Its purpose is mainly to carry the access specifier (and possibly other properties that might be shared by all class members) for the member. More... | |
class | member_class_template |
Abstracts a member class template template. More... | |
class | member_function_template |
Abstract a member function template. More... | |
class | method_decl |
Abstraction of the declaration of a method. More... | |
class | method_type |
Abstracts the type of a class member function. More... | |
class | namespace_decl |
The abstraction of a namespace declaration. More... | |
struct | node_visitor_base |
The base class for the visitor type hierarchy used for traversing a hierarchy of nodes. More... | |
class | non_type_tparameter |
Abstracts non type template parameters. More... | |
class | pointer_type_def |
The abstraction of a pointer type. More... | |
class | ptr_to_mbr_type |
The abstraction of a pointer-to-member type. More... | |
class | qualified_type_def |
The abstraction of a qualified type. More... | |
class | real_type |
The internal representation of an integral type. More... | |
class | reference_type_def |
Abstracts a reference type. More... | |
class | scope_decl |
A declaration that introduces a scope. More... | |
class | scope_type_decl |
A type that introduces a scope. More... | |
struct | shared_translation_unit_comp |
A comparison functor to compare translation units based on their absolute paths. More... | |
struct | sort_for_hash_functor |
Functor used to sort types before hashing them. More... | |
class | template_decl |
The base class of templates. More... | |
class | template_parameter |
Base class for a template parameter. Client code should use the more specialized type_template_parameter, non_type_template_parameter and template_template_parameter below. More... | |
class | template_tparameter |
Abstracts a template template parameter. More... | |
class | translation_unit |
This is the abstraction of the set of relevant artefacts (types, variable declarations, functions, templates, etc) bundled together into a translation unit. More... | |
class | traversable_base |
The interface for types which are feeling social and want to be visited during the traversal of a hierarchy of nodes. More... | |
class | type_base |
An abstraction helper for type declarations. More... | |
class | type_composition |
This abstracts a composition of types based on template type parameters. The result of the composition is a type that can be referred to by a template non-type parameter. Instances of this type can appear at the same level as template parameters, in the scope of a template_decl. More... | |
class | type_decl |
A basic type declaration that introduces no scope. More... | |
class | type_maps |
This is a type that aggregates maps of all the kinds of types that are supported by libabigail. More... | |
class | type_or_decl_base |
The base class of both types and declarations. More... | |
struct | type_or_decl_base_comp |
A comparison functor to compare pointer to instances of type_or_decl_base. More... | |
struct | type_or_decl_equal |
The comparison functor for using instances of type_or_decl_base as values in a hash map or set. More... | |
struct | type_or_decl_hash |
The hashing functor for using instances of type_or_decl_base as values in a hash map or set. More... | |
struct | type_ptr_equal |
A predicate for deep equality of instances of type_base*. More... | |
struct | type_shared_ptr_equal |
A predicate for deep equality of instances of shared_ptr<type_base> More... | |
struct | type_topo_comp |
A functor to sort types somewhat topologically. That is, types are sorted in a way that makes the ones that are defined "first" to come first. More... | |
class | type_tparameter |
Abstracts a type template parameter. More... | |
class | typedef_decl |
The abstraction of a typedef declaration. More... | |
struct | uint64_t_pair_hash |
The hashing functor for a pair of uint64_t. More... | |
class | union_decl |
Abstracts a union type declaration. More... | |
class | var_decl |
Abstracts a variable declaration. More... | |
Typedefs | |
typedef shared_ptr< array_type_def > | array_type_def_sptr |
Convenience typedef for a shared pointer on a array_type_def. More... | |
typedef unordered_set< const type_or_decl_base *, type_or_decl_hash, type_or_decl_equal > | artifact_ptr_set_type |
A convenience typedef for a hash set of const type_or_decl_base*. More... | |
typedef unordered_set< type_or_decl_base_sptr, type_or_decl_hash, type_or_decl_equal > | artifact_sptr_set_type |
A convenience typedef for a hash set of type_or_decl_base_sptr. More... | |
typedef unordered_set< type_base_sptr, canonical_type_hash > | canonical_type_sptr_set_type |
Helper typedef for an unordered set of type_base_sptr which uses pointer value to tell its members appart, because the members are canonical types. More... | |
typedef shared_ptr< class_decl > | class_decl_sptr |
Convenience typedef for a shared pointer on a class_decl. More... | |
typedef weak_ptr< class_decl > | class_decl_wptr |
Convenience typedef for a weak pointer on a class_decl. More... | |
typedef shared_ptr< class_or_union > | class_or_union_sptr |
typedef weak_ptr< class_or_union > | class_or_union_wptr |
typedef unordered_set< const class_or_union * > | class_set_type |
A convenience typedef for a set of pointer to class_or_union. More... | |
typedef shared_ptr< class_tdecl > | class_tdecl_sptr |
Convenience typedef for a shared pointer on a class_tdecl. More... | |
typedef vector< class_or_union_sptr > | classes_or_unions_type |
Convenience typedef for a vector of class_or_union_sptr. More... | |
typedef vector< class_decl_sptr > | classes_type |
Convenience typedef for a vector of class_decl_sptr. More... | |
typedef shared_ptr< context_rel > | context_rel_sptr |
A convenience typedef for shared pointers to context_rel. More... | |
typedef shared_ptr< corpus_group > | corpus_group_sptr |
typedef shared_ptr< corpus > | corpus_sptr |
typedef weak_ptr< corpus > | corpus_wptr |
Convenience typedef for a weak pointer to a corpus. More... | |
typedef shared_ptr< decl_base > | decl_base_sptr |
typedef weak_ptr< decl_base > | decl_base_wptr |
Convenience typedef for a weak pointer to a decl_base. More... | |
typedef shared_ptr< dm_context_rel > | dm_context_rel_sptr |
A convenience typedef for a shared pointer to dm_context_rel. More... | |
typedef shared_ptr< elf_symbol > | elf_symbol_sptr |
A convenience typedef for a shared pointer to elf_symbol. More... | |
typedef weak_ptr< elf_symbol > | elf_symbol_wptr |
A convenience typedef for a weak pointer to elf_symbol. More... | |
typedef std::vector< elf_symbol_sptr > | elf_symbols |
Convenience typedef for a vector of elf_symbol. More... | |
typedef shared_ptr< enum_type_decl > | enum_type_decl_sptr |
Convenience typedef for shared pointer to a enum_type_decl. More... | |
typedef vector< enum_type_decl_sptr > | enums_type |
Convenience typedef for a vector of enum_type_decl_sptr. More... | |
typedef shared_ptr< environment > | environment_sptr |
Convenience typedef for a shared pointer to an environment. More... | |
typedef unordered_map< const function_decl *, bool, function_decl::hash, function_decl::ptr_equal > | fn_ptr_map_type |
Convenience typedef for a hash map of pointer to function_decl and boolean. More... | |
typedef unordered_set< const function_type * > | fn_set_type |
A convenience typedef for a set of pointer to function_type. More... | |
typedef unordered_map< function_type_sptr, bool, function_type::hash, type_shared_ptr_equal > | fn_type_ptr_map |
typedef unordered_map< const function_decl *, string, function_decl_hash, function_decl::ptr_equal > | fns_to_str_map_type |
Convenience typedef for a hash map of pointer to function_decl and string. More... | |
typedef shared_ptr< function_decl > | function_decl_sptr |
Convenience typedef for a shared pointer on a function_decl. More... | |
typedef shared_ptr< function_tdecl > | function_tdecl_sptr |
Convenience typedef for a shared pointer on a function_tdecl. More... | |
typedef shared_ptr< function_type > | function_type_sptr |
Convenience typedef for a shared pointer on a function_type. More... | |
typedef weak_ptr< function_type > | function_type_wptr |
Convenience typedef for a weak pointer on a function_type. More... | |
typedef vector< function_type_sptr > | function_types_type |
Convenience typedef fo a vector of function_type_sptr. More... | |
typedef shared_ptr< global_scope > | global_scope_sptr |
Convenience typedef for shared pointer on global_scope. More... | |
typedef abg_compat::optional< uint64_t > | hash_t |
The abstraction for an 8 bytes hash value. More... | |
typedef unordered_map< interned_string, bool, hash_interned_string > | interned_string_bool_map_type |
Convenience typedef for a map of interned_string -> bool. More... | |
typedef shared_ptr< ir_traversable_base > | ir_traversable_base_sptr |
Convenience typedef for a shared pointer to ir_traversable_base. More... | |
typedef unordered_map< interned_string, std::unordered_set< function_decl * >, hash_interned_string > | istr_fn_ptr_set_map_type |
Convenience typedef for a hash map which key is an interned_string and which data is a set of abigail::ir::function_decl*. More... | |
typedef unordered_map< interned_string, var_decl_sptr, hash_interned_string > | istr_var_ptr_map_type |
Convenience typedef for a hash map which key is an interned_string and which data is an abigail::ir::var_decl*. More... | |
typedef unordered_map< interned_string, std::unordered_set< var_decl_sptr >, hash_interned_string > | istr_var_ptr_set_map_type |
Convenience typedef for a hash map which key is an interned_string and which data is a set of abigail::ir::var_decl_sptr. More... | |
typedef unordered_map< interned_string, const function_decl *, hash_interned_string > | istring_function_decl_ptr_map_type |
typedef unordered_map< interned_string, type_base_wptr, hash_interned_string > | istring_type_base_wptr_map_type |
A convenience typedef for a map which key is an interned_string and which value is a type_base_wptr. More... | |
typedef unordered_map< interned_string, type_base_wptrs_type, hash_interned_string > | istring_type_base_wptrs_map_type |
A convenience typedef for a map which key is an interned_string and which value is a vector of type_base_wptr. More... | |
typedef unordered_map< interned_string, type_or_decl_base_sptr, hash_interned_string > | istring_type_or_decl_base_sptr_map_type |
A convenience typedef for a map which key is an interned_string and which value is a type_base_wptr. More... | |
typedef unordered_map< interned_string, var_decl_sptr, hash_interned_string > | istring_var_decl_ptr_map_type |
typedef shared_ptr< mem_fn_context_rel > | mem_fn_context_rel_sptr |
A convenience typedef for a shared pointer to mem_fn_context_rel. More... | |
typedef shared_ptr< member_class_template > | member_class_template_sptr |
typedef vector< member_class_template_sptr > | member_class_templates |
typedef shared_ptr< member_function_template > | member_function_template_sptr |
typedef vector< member_function_template_sptr > | member_function_templates |
typedef shared_ptr< method_decl > | method_decl_sptr |
typedef shared_ptr< method_type > | method_type_sptr |
Convenience typedef for shared pointer to method_type. More... | |
typedef shared_ptr< namespace_decl > | namespace_decl_sptr |
Convenience typedef for a shared pointer on namespace_decl. More... | |
typedef vector< namespace_decl_sptr > | namespaces_type |
A convenience typedef for vectors of namespace_decl_sptr. More... | |
typedef shared_ptr< non_type_tparameter > | non_type_tparameter_sptr |
Convenience typedef for shared pointer to non_type_template_parameter. More... | |
typedef unordered_set< uintptr_t > | pointer_set |
A convenience typedef for an unordered set of pointer values. More... | |
typedef shared_ptr< pointer_type_def > | pointer_type_def_sptr |
Convenience typedef for a shared pointer on a pointer_type_def. More... | |
typedef shared_ptr< ptr_to_mbr_type > | ptr_to_mbr_type_sptr |
Convenience typedef for a shared pointer to a ptr_to_mbr_type. More... | |
typedef shared_ptr< qualified_type_def > | qualified_type_def_sptr |
typedef shared_ptr< reference_type_def > | reference_type_def_sptr |
Convenience typedef for a shared pointer on a reference_type_def. More... | |
typedef vector< regex_t_sptr > | regex_t_sptrs_type |
A convenience typedef for std::vector<regex_t_sptr>. More... | |
typedef shared_ptr< scope_decl > | scope_decl_sptr |
Convenience typedef for a shared pointer on a scope_decl. More... | |
typedef unordered_map< string, const function_decl * > | str_fn_ptr_map_type |
Convenience typedef for a hash map of string and pointer to function_decl. More... | |
typedef unordered_map< string, std::unordered_set< function_decl * > > | str_fn_ptr_set_map_type |
Convenience typedef for a hash map which key is a string and which data is a set of abigail::ir::function_decl*. More... | |
typedef unordered_map< string, vector< function_decl * > > | str_fn_ptrs_map_type |
Convenience typedef for a hash map which key is a string and which data is a vector of abigail::ir::function_decl*. More... | |
typedef unordered_map< string, var_decl_sptr > | str_var_ptr_map_type |
Convenience typedef for a hash map which key is a string and which data is an abigail::ir::var_decl*. More... | |
typedef unordered_map< string, decl_base_sptr > | string_decl_base_sptr_map |
Convenience typedef for a map which key is a string and which value is a decl_base_sptr. More... | |
typedef shared_ptr< string_elf_symbol_sptr_map_type > | string_elf_symbol_sptr_map_sptr |
Convenience typedef for a shared pointer to an string_elf_symbol_sptr_map_type. More... | |
typedef std::unordered_map< string, elf_symbol_sptr > | string_elf_symbol_sptr_map_type |
Convenience typedef for a map which key is a string and which value if the elf symbol of the same name. More... | |
typedef shared_ptr< string_elf_symbols_map_type > | string_elf_symbols_map_sptr |
Convenience typedef for a shared pointer to string_elf_symbols_map_type. More... | |
typedef std::unordered_map< string, elf_symbols > | string_elf_symbols_map_type |
Convenience typedef for a map which key is a string and which value is a vector of elf_symbol. More... | |
typedef unordered_map< string, translation_unit_sptr > | string_tu_map_type |
Convenience typedef for a map that associates a string to a translation unit. More... | |
typedef unordered_map< string, type_base_sptr > | string_type_base_sptr_map_type |
A convenience typedef for a map which key is a string and which value is a type_base_sptr. More... | |
typedef unordered_map< string, type_base_wptr > | string_type_base_wptr_map_type |
A convenience typedef for a map which key is a string and which value is a type_base_wptr. More... | |
typedef shared_ptr< template_decl > | template_decl_sptr |
Convenience typedef for a shared pointer to template_decl. More... | |
typedef weak_ptr< template_decl > | template_decl_wptr |
Convenience typedef for a weak pointer to template_decl. More... | |
typedef shared_ptr< template_parameter > | template_parameter_sptr |
Convenience typedef for shared pointer to template parameter. More... | |
typedef shared_ptr< template_tparameter > | template_tparameter_sptr |
Convenience typedef for a shared_ptr to template_tparameter. More... | |
typedef shared_ptr< translation_unit > | translation_unit_sptr |
Convenience typedef for a shared pointer on a translation_unit type. More... | |
typedef std::set< translation_unit_sptr, shared_translation_unit_comp > | translation_units |
Convenience typedef for an ordered set of translation_unit_sptr. More... | |
typedef vector< type_base * > | type_base_ptrs_type |
Helper typedef for a vector of pointer to type_base. More... | |
typedef shared_ptr< type_base > | type_base_sptr |
typedef vector< type_base_sptr > | type_base_sptrs_type |
Helper typedef for a vector of shared pointer to a type_base. More... | |
typedef weak_ptr< type_base > | type_base_wptr |
Convenience typedef for a weak pointer on a type_base. More... | |
typedef vector< type_base_wptr > | type_base_wptrs_type |
A convenience typedef for a vector of type_base_wptr. More... | |
typedef unordered_map< uint64_t_pair_type, bool, uint64_t_pair_hash > | type_comparison_result_type |
A convenience typedef for a map which key is a pair of uint64_t and which value is a boolean. This is initially intended to cache the result of comparing two (sub-)types. More... | |
typedef shared_ptr< type_composition > | type_composition_sptr |
Convenience typedef for shared pointer to type_composition. More... | |
typedef shared_ptr< type_decl > | type_decl_sptr |
Convenience typedef for a shared pointer on a type_decl. More... | |
typedef shared_ptr< type_or_decl_base > | type_or_decl_base_sptr |
A convenience typedef for a shared_ptr to type_or_decl_base. More... | |
typedef shared_ptr< type_tparameter > | type_tparameter_sptr |
Convenience typedef for a shared pointer to type_tparameter. More... | |
typedef shared_ptr< typedef_decl > | typedef_decl_sptr |
Convenience typedef for a shared pointer on a typedef_decl. More... | |
typedef weak_ptr< typedef_decl > | typedef_decl_wptr |
Convenience typedef for a weak pointer on a typedef_decl. More... | |
typedef std::pair< uint64_t, uint64_t > | uint64_t_pair_type |
A convenience typedef for a pair of uint64_t which is initially intended to store a pair of pointer values. More... | |
typedef unordered_set< uint64_t_pair_type, uint64_t_pair_hash > | uint64_t_pairs_set_type |
A convenience typedef for a set of uint64_t_pair. More... | |
typedef shared_ptr< union_decl > | union_decl_sptr |
typedef shared_ptr< var_decl > | var_decl_sptr |
Convenience typedef for a shared pointer on a var_decl. More... | |
typedef weak_ptr< var_decl > | var_decl_wptr |
Convenience typedef for a weak pointer on a var_decl. More... | |
typedef unordered_map< const var_decl *, bool, var_decl::hash, var_decl::ptr_equal > | var_ptr_map_type |
Convenience typedef for a hash map of pointer to var_decl and boolean. More... | |
Enumerations | |
enum | access_specifier { no_access , public_access , protected_access , private_access } |
Access specifier for class members. More... | |
enum | change_kind { NO_CHANGE_KIND , LOCAL_TYPE_CHANGE_KIND , LOCAL_NON_TYPE_CHANGE_KIND , ALL_LOCAL_CHANGES_MASK , SUBTYPE_CHANGE_KIND } |
A bitfield that gives callers of abigail::ir::equals() some insight about how different two internal representation artifacts are. More... | |
enum | comparison_result { COMPARISON_RESULT_DIFFERENT , COMPARISON_RESULT_EQUAL , COMPARISON_RESULT_CYCLE_DETECTED , COMPARISON_RESULT_UNKNOWN } |
The result of structural comparison of type ABI artifacts. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
class_or_union * | anonymous_data_member_to_class_or_union (const var_decl *d) |
Get the class_or_union type of a given anonymous data member. More... | |
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. More... | |
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. More... | |
string | build_qualified_name (const scope_decl *scope, const string &name) |
Build and return a qualified name from a name and its scope. More... | |
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. More... | |
type_base_sptr | canonicalize (type_base_sptr t, bool do_log, bool show_stats) |
Compute the canonical type of a given type. More... | |
template<typename input_iterator , typename deref_lambda > | |
void | canonicalize_types (const input_iterator &begin, const input_iterator &end, deref_lambda deref, bool do_log=false, bool show_stats=false) |
Compute the canonical type for all the IR types of the system. More... | |
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. More... | |
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. More... | |
bool | classes_have_same_layout (const type_base_sptr &f, const type_base_sptr &s) |
Test if two classes have the same layout. More... | |
array_type_def_sptr | clone_array (const array_type_def_sptr &array) |
Clone an array type. More... | |
type_base_sptr | clone_array_tree (const type_base_sptr t) |
Clone a type tree made of an array or a typedef of array. More... | |
qualified_type_def_sptr | clone_qualified_type (const qualified_type_def_sptr &t) |
Clone a qualifiend type. More... | |
typedef_decl_sptr | clone_typedef (const typedef_decl_sptr &t) |
Clone a typedef type. More... | |
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. More... | |
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. More... | |
bool | compare_using_locations (const decl_base *f, const decl_base *s) |
Compare decls using their locations. More... | |
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. More... | |
string | components_to_type_name (const std::list< 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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
const class_or_union_sptr | data_member_has_anonymous_type (const var_decl &d) |
Test if a data member has annonymous type or not. More... | |
const class_or_union_sptr | data_member_has_anonymous_type (const var_decl *d) |
Test if a data member has annonymous type or not. More... | |
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. More... | |
decl_base * | debug (const decl_base *artifact) |
Emit a textual representation of an artifact to std error stream for debugging purposes. More... | |
type_base * | debug (const type_base *artifact) |
Emit a textual representation of an artifact to std error stream for debugging purposes. More... | |
type_or_decl_base * | debug (const type_or_decl_base *artifact) |
Emit a textual representation of an artifact to std error stream for debugging purposes. More... | |
void | debug_comp_stack (const environment &env) |
Emit a trace of the two comparison operands stack on the standard error stream. More... | |
bool | debug_equals (const type_or_decl_base *l, const type_or_decl_base *r) |
Test if two ABI artifacts are equal. More... | |
bool | decl_name_changed (const type_or_decl_base *a1, const type_or_decl_base *a2) |
Test if two decls have different names. More... | |
bool | decl_name_changed (const type_or_decl_base_sptr &d1, const type_or_decl_base_sptr &d2) |
Test if two decls have different names. More... | |
string | demangle_cplus_mangled_name (const string &mangled_name) |
Demangle a C++ mangled name and return the resulting string. More... | |
template<typename T > | |
hash_t | do_hash_value (const shared_ptr< T > &tod) |
Compute the hash value of an IR node and return it. More... | |
template<typename T > | |
hash_t | do_hash_value (const T &tod) |
Compute the hash value of an IR node and return it. More... | |
template<typename T > | |
hash_t | do_hash_value (const T *tod) |
Compute the hash value of an IR node and return it. More... | |
bool | elf_symbol_is_function (elf_symbol::type t) |
Test if the type of an ELF symbol denotes a function symbol. More... | |
bool | elf_symbol_is_variable (elf_symbol::type t) |
Test if the type of an ELF symbol denotes a function symbol. More... | |
bool | elf_symbols_alias (const elf_symbol &s1, const elf_symbol &s2) |
Test if two symbols alias. More... | |
bool | elf_symbols_alias (const elf_symbol *s1, const elf_symbol *s2) |
Test if two symbols alias. More... | |
bool | elf_symbols_alias (const elf_symbol_sptr s1, const elf_symbol_sptr s2) |
Test if two symbols alias. More... | |
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. More... | |
bool | equals (const array_type_def &l, const array_type_def &r, change_kind *k) |
Compares two instances of array_type_def. More... | |
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. More... | |
bool | equals (const class_decl &l, const class_decl &r, change_kind *k) |
Compares two instances of class_decl. More... | |
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. More... | |
bool | equals (const class_or_union &l, const class_or_union &r, change_kind *k) |
Compares two instances of class_or_union. More... | |
bool | equals (const decl_base &l, const decl_base &r, change_kind *k) |
Compares two instances of decl_base. More... | |
bool | equals (const enum_type_decl &l, const enum_type_decl &r, change_kind *k) |
Compares two instances of enum_type_decl. More... | |
bool | equals (const function_decl &l, const function_decl &r, change_kind *k) |
Compares two instances of function_decl. More... | |
bool | equals (const function_decl::parameter &l, const function_decl::parameter &r, change_kind *k) |
Compares two instances of function_decl::parameter. More... | |
bool | equals (const function_type &l, const function_type &r, change_kind *k) |
Compare two function types. More... | |
bool | equals (const pointer_type_def &l, const pointer_type_def &r, change_kind *k) |
Compares two instances of pointer_type_def. More... | |
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. More... | |
bool | equals (const qualified_type_def &l, const qualified_type_def &r, change_kind *k) |
Compares two instances of qualified_type_def. More... | |
bool | equals (const reference_type_def &l, const reference_type_def &r, change_kind *k) |
Compares two instances of reference_type_def. More... | |
bool | equals (const scope_decl &l, const scope_decl &r, change_kind *k) |
Compares two instances of scope_decl. More... | |
bool | equals (const scope_type_decl &l, const scope_type_decl &r, change_kind *k) |
Compares two instances of scope_type_decl. More... | |
bool | equals (const type_base &l, const type_base &r, change_kind *k) |
Compares two instances of type_base. More... | |
bool | equals (const type_decl &l, const type_decl &r, change_kind *k) |
Compares two instances of type_decl. More... | |
bool | equals (const typedef_decl &l, const typedef_decl &r, change_kind *k) |
Compares two instances of typedef_decl. More... | |
bool | equals (const union_decl &l, const union_decl &r, change_kind *k) |
Compares two instances of union_decl. More... | |
bool | equals (const var_decl &l, const var_decl &r, change_kind *k) |
Compares two instances of var_decl. More... | |
bool | equals_modulo_cv_qualifier (const array_type_def *l, const array_type_def *r) |
Test if two array types are equals modulo CV qualifiers. More... | |
bool | equals_modulo_cv_qualifier (const array_type_def_sptr &l, const array_type_def_sptr &r) |
Test if two array types are equals modulo CV qualifiers. More... | |
bool | equals_modulo_cv_qualifier (const pointer_type_def *l, const pointer_type_def *r) |
Test if two pointer types are equals modulo CV qualifiers. More... | |
bool | equals_modulo_cv_qualifier (const pointer_type_def_sptr &l, const pointer_type_def_sptr &r) |
Test if two pointer types are equals modulo CV qualifiers. More... | |
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. More... | |
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. More... | |
var_decl_sptr | find_last_data_member_matching_regexp (const class_or_union &t, const regex::regex_t_sptr ®ex) |
Find the last data member of a class or union which name matches a regular expression. More... | |
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. More... | |
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. More... | |
void | fqn_to_components (const std::string &, std::list< string > &) |
void | fqn_to_components (const string &fqn, list< string > &comps) |
Decompose a fully qualified name into the list of its components. More... | |
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. More... | |
bool | function_decls_alias (const function_decl &f1, const function_decl &f2) |
Test if two function declarations are aliases. More... | |
uint64_t | get_absolute_data_member_offset (const var_decl &m) |
Get the absolute offset of a data member. More... | |
uint64_t | get_absolute_data_member_offset (const var_decl_sptr &m) |
Get the absolute offset of a data member. More... | |
const location & | get_artificial_or_natural_location (const decl_base *decl) |
Get the artificial location of a decl. More... | |
size_t | get_canonical_type_index (const type_base &t) |
Getter of the canonical type index of a given type. More... | |
size_t | get_canonical_type_index (const type_base *t) |
Getter of the canonical type index of a given type. More... | |
size_t | get_canonical_type_index (const type_base_sptr &t) |
Getter of the canonical type index of a given type. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
bool | get_data_member_is_laid_out (const var_decl &m) |
Test whether a data member is laid out. More... | |
bool | get_data_member_is_laid_out (const var_decl_sptr m) |
Test whether a data member is laid out. More... | |
uint64_t | get_data_member_offset (const decl_base_sptr d) |
Get the offset of a data member. More... | |
uint64_t | get_data_member_offset (const var_decl &m) |
Get the offset of a data member. More... | |
uint64_t | get_data_member_offset (const var_decl_sptr m) |
Get the offset of a data member. More... | |
string | get_debug_representation (const type_or_decl_base *artifact) |
Get the textual representation of a type for debugging purposes. More... | |
string | get_enum_flat_representation (const enum_type_decl &enum_type, const string &indent, bool one_line, bool internal, bool qualified_names) |
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. More... | |
string | get_enum_flat_representation (const enum_type_decl *enum_type, const string &indent, bool one_line, bool internal, bool qualified_names) |
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. More... | |
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. More... | |
type_base * | get_exemplar_type (const type_base *type) |
For a given type, return its exemplar type. More... | |
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. More... | |
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. More... | |
const function_decl::parameter * | get_function_parameter (const decl_base *fun, unsigned parm_index) |
Get the function parameter designated by its index. More... | |
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. More... | |
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. More... | |
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. More... | |
const global_scope * | get_global_scope (const decl_base &decl) |
return the global scope as seen by a given declaration. More... | |
const global_scope * | get_global_scope (const decl_base *decl) |
return the global scope as seen by a given declaration. More... | |
const global_scope * | get_global_scope (const decl_base_sptr) |
const global_scope * | get_global_scope (const shared_ptr< decl_base > decl) |
Return the global scope as seen by a given declaration. More... | |
var_decl_sptr | get_last_data_member (const class_or_union &klass) |
Get the last data member of a class type. More... | |
var_decl_sptr | get_last_data_member (const class_or_union *klass) |
Get the last data member of a class type. More... | |
var_decl_sptr | get_last_data_member (const class_or_union_sptr &klass) |
Get the last data member of a class type. More... | |
location | get_location (const decl_base_sptr &decl) |
Get the location of a given declaration. More... | |
location | get_location (const type_base_sptr &type) |
Get the location of the declaration of a given type. More... | |
access_specifier | get_member_access_specifier (const decl_base &d) |
Gets the access specifier for a class member. More... | |
access_specifier | get_member_access_specifier (const decl_base_sptr &d) |
Gets the access specifier for a class member. More... | |
bool | get_member_function_is_const (const function_decl &f) |
Test whether a member function is const. More... | |
bool | get_member_function_is_const (const function_decl_sptr &f) |
Test whether a member function is const. More... | |
bool | get_member_function_is_ctor (const function_decl &f) |
Test whether a member function is a constructor. More... | |
bool | get_member_function_is_ctor (const function_decl_sptr &f) |
Test whether a member function is a constructor. More... | |
bool | get_member_function_is_dtor (const function_decl &f) |
Test whether a member function is a destructor. More... | |
bool | get_member_function_is_dtor (const function_decl_sptr &f) |
Test whether a member function is a destructor. More... | |
bool | get_member_function_is_virtual (const function_decl &f) |
Test if a given member function is virtual. More... | |
bool | get_member_function_is_virtual (const function_decl *mem_fn) |
Test if a given member function is virtual. More... | |
bool | get_member_function_is_virtual (const function_decl_sptr &mem_fn) |
Test if a given member function is virtual. More... | |
ssize_t | get_member_function_vtable_offset (const function_decl &f) |
Get the vtable offset of a member function. More... | |
ssize_t | get_member_function_vtable_offset (const function_decl_sptr &f) |
Get the vtable offset of a member function. More... | |
bool | get_member_is_static (const decl_base &d) |
Gets a flag saying if a class member is static or not. More... | |
bool | get_member_is_static (const decl_base *d) |
Gets a flag saying if a class member is static or not. More... | |
bool | get_member_is_static (const decl_base_sptr &d) |
Gets a flag saying if a class member is static or not. More... | |
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. More... | |
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. More... | |
interned_string | get_method_type_name (const method_type_sptr &, bool internal=false) |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
const location & | get_natural_or_artificial_location (const decl_base *decl) |
Get the non-artificial (natural) location of a decl. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
template<> | |
const interned_string & | get_node_name (class_decl_sptr node) |
Gets the name of a class_decl node. More... | |
template<> | |
const interned_string & | get_node_name (type_base_sptr node) |
Gets the name of a type_base node. More... | |
template<> | |
const interned_string & | get_node_name (var_decl_sptr node) |
Gets the name of a var_decl node. More... | |
string | get_pretty_representation (const decl_base *d, bool internal) |
Get a copy of the pretty representation of a decl. More... | |
string | get_pretty_representation (const decl_base_sptr &d, bool internal) |
Get a copy of the pretty representation of a decl. More... | |
string | get_pretty_representation (const function_type &fn_type, bool internal) |
Get the pretty representation of a function type. More... | |
string | get_pretty_representation (const function_type *fn_type, bool internal) |
Get the pretty representation of a function type. More... | |
string | get_pretty_representation (const function_type_sptr &fn_type, bool internal) |
Get the pretty representation of a function type. More... | |
string | get_pretty_representation (const method_type &method, bool internal) |
Get the pretty representation of a method type. More... | |
string | get_pretty_representation (const method_type *method, bool internal) |
Get the pretty representation of a method type. More... | |
string | get_pretty_representation (const method_type_sptr &, bool internal=false) |
string | get_pretty_representation (const method_type_sptr method, bool internal) |
Get the pretty representation of a method type. More... | |
string | get_pretty_representation (const type_base *t, bool internal) |
Get a copy of the pretty representation of a type. More... | |
string | get_pretty_representation (const type_base_sptr &t, bool internal) |
Get a copy of the pretty representation of a type. More... | |
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. More... | |
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. More... | |
string | get_string_representation_of_cv_quals (const qualified_type_def::CV cv_quals) |
Get the string representation of a CV qualifier bitmap. More... | |
const scope_decl * | get_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. More... | |
const scope_decl * | get_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. More... | |
const scope_decl * | get_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. More... | |
translation_unit * | get_translation_unit (const type_or_decl_base &t) |
Return the translation unit a declaration belongs to. More... | |
translation_unit * | get_translation_unit (const type_or_decl_base *decl) |
Return the translation unit a declaration belongs to. More... | |
translation_unit * | get_translation_unit (const type_or_decl_base_sptr &decl) |
Return the translation unit a declaration belongs to. More... | |
const decl_base * | get_type_declaration (const type_base *t) |
Get the declaration for a given type. More... | |
decl_base_sptr | get_type_declaration (const type_base_sptr t) |
Get the declaration for a given type. More... | |
decl_base * | get_type_declaration (type_base *t) |
Get the declaration for a given type. More... | |
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. More... | |
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. More... | |
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. More... | |
scope_decl * | get_type_scope (const type_base_sptr &t) |
Get the scope of a given type. More... | |
scope_decl * | get_type_scope (type_base *t) |
Get the scope of a given type. More... | |
uint64_t | get_var_size_in_bits (const var_decl_sptr &v) |
Get the size of a given variable. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
bool | has_scope (const decl_base &d) |
Tests if a declaration has got a scope. More... | |
bool | has_scope (const decl_base_sptr d) |
Tests if a declaration has got a scope. More... | |
template<typename IteratorType , typename deref_lambda > | |
void | hash_and_canonicalize_types (IteratorType begin, IteratorType end, deref_lambda deref, bool do_log=false, bool show_stats=false) |
Hash and canonicalize a sequence of types. More... | |
size_t | hash_type (const type_base *t) |
Hash an ABI artifact that is a type. More... | |
size_t | hash_type_or_decl (const type_or_decl_base *tod) |
Hash an ABI artifact that is either a type or a decl. More... | |
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. More... | |
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. More... | |
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. More... | |
decl_base_sptr | insert_decl_into_scope (decl_base_sptr, vector< decl_base_sptr >::iterator, scope_decl *) |
decl_base_sptr | insert_decl_into_scope (decl_base_sptr, vector< decl_base_sptr >::iterator, scope_decl_sptr) |
bool | integral_type_has_harmless_name_change (const decl_base_sptr &f, const decl_base_sptr &s) |
Test if a diff node carries a change whereby two integral types have different names in a harmless way. More... | |
bool | integral_type_has_harmless_name_change (const type_base_sptr &f, const type_base_sptr &s) |
Test if a diff node carries a change whereby two integral types have different names in a harmless way. More... | |
bool | is_ada_language (translation_unit::language l) |
Test if a language enumerator designates the Ada language. More... | |
bool | is_anonymous_data_member (const decl_base &d) |
Test if a decl is an anonymous data member. More... | |
const var_decl * | is_anonymous_data_member (const decl_base *d) |
Test if a decl is an anonymous data member. More... | |
var_decl_sptr | is_anonymous_data_member (const decl_base_sptr &d) |
Test if a decl is an anonymous data member. More... | |
const var_decl * | is_anonymous_data_member (const type_or_decl_base *d) |
Test if a decl is an anonymous data member. More... | |
var_decl_sptr | is_anonymous_data_member (const type_or_decl_base_sptr &d) |
Test if a decl is an anonymous data member. More... | |
bool | is_anonymous_data_member (const var_decl &d) |
Test if a var_decl is an anonymous data member. More... | |
const var_decl * | is_anonymous_data_member (const var_decl *d) |
Test if a var_decl is an anonymous data member. More... | |
var_decl_sptr | is_anonymous_data_member (const var_decl_sptr &d) |
Test if a var_decl is an anonymous data member. More... | |
bool | is_anonymous_or_typedef_named (const decl_base &d) |
Test if a given decl is anonymous or has a naming typedef. More... | |
bool | is_anonymous_type (const type_base *t) |
Test whether a declaration is a type. More... | |
bool | is_anonymous_type (const type_base_sptr &t) |
Test if a given type is anonymous. More... | |
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. More... | |
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. More... | |
array_type_def * | is_array_type (const type_or_decl_base *type, bool look_through_qualifiers) |
Test if a type is an array_type_def. More... | |
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. More... | |
class_or_union * | is_at_class_scope (const decl_base &decl) |
Tests whether a given decl is at class scope. More... | |
class_or_union * | is_at_class_scope (const decl_base *decl) |
Tests whether a given decl is at class scope. More... | |
class_or_union * | is_at_class_scope (const decl_base_sptr decl) |
Tests whether a given decl is at class scope. More... | |
bool | is_at_global_scope (const decl_base &decl) |
Tests whether a given declaration is at global scope. More... | |
bool | is_at_global_scope (const decl_base *decl) |
Tests whether a given declaration is at global scope. More... | |
bool | is_at_global_scope (const decl_base_sptr decl) |
Tests whether a given declaration is at global scope. More... | |
bool | is_at_template_scope (const decl_base_sptr) |
bool | is_at_template_scope (const shared_ptr< decl_base > decl) |
Tests whether a given decl is at template scope. More... | |
bool | is_c_language (translation_unit::language l) |
Test if a language enumerator designates the C language. More... | |
class_decl::base_spec * | is_class_base_spec (const type_or_decl_base *tod) |
Test if an ABI artifact is a class base specifier. More... | |
class_decl::base_spec * | is_class_base_spec (type_or_decl_base *) |
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. More... | |
shared_ptr< class_or_union > | is_class_or_union_type (const shared_ptr< type_or_decl_base > &t) |
Test if a type is a class_or_union. More... | |
class_or_union * | is_class_or_union_type (const type_or_decl_base *t) |
Test if a type is a class_or_union. More... | |
class_or_union_sptr | is_class_or_union_type (const type_or_decl_base_sptr &) |
bool | is_class_type (const type_or_decl_base &t) |
Test whether a type is a class. More... | |
class_decl * | is_class_type (const type_or_decl_base *t) |
Test whether a type is a class. More... | |
class_decl_sptr | is_class_type (const type_or_decl_base_sptr &d) |
Test whether a type is a class. More... | |
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. More... | |
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). More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
bool | is_const_qualified_type (const qualified_type_def_sptr &t) |
Test if a given qualified type is const. More... | |
bool | is_const_qualified_type (const type_base_sptr &t) |
Test if a given type is const-qualified. More... | |
corpus_group_sptr | is_corpus_group (const corpus_sptr &corpus) |
Test if a corpus is a corpus_group. More... | |
bool | is_cplus_plus_language (translation_unit::language l) |
Test if a language enumerator designates the C++ language. More... | |
var_decl * | is_data_member (const decl_base *d) |
Test if a decl is a data member. More... | |
var_decl_sptr | is_data_member (const decl_base_sptr &d) |
Test if a decl is a data member. More... | |
var_decl * | is_data_member (const type_or_decl_base *d) |
Test if a decl is a data member. More... | |
var_decl_sptr | is_data_member (const type_or_decl_base_sptr &d) |
Test if a decl is a data member. More... | |
bool | is_data_member (const var_decl &v) |
Test if a var_decl is a data member. More... | |
bool | is_data_member (const var_decl *v) |
Test if a var_decl is a data member. More... | |
bool | is_data_member (const var_decl_sptr d) |
Test if a var_decl is a data member. More... | |
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. More... | |
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. More... | |
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. More... | |
decl_base * | is_decl (const type_or_decl_base *d) |
Test if an ABI artifact is a declaration. More... | |
decl_base_sptr | is_decl (const type_or_decl_base_sptr &d) |
Test if an ABI artifact is a declaration. More... | |
decl_base * | is_decl_slow (const type_or_decl_base *t) |
Test if an ABI artifact is a declaration. More... | |
decl_base_sptr | is_decl_slow (const type_or_decl_base_sptr &t) |
Test if an ABI artifact is a declaration. More... | |
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. More... | |
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. More... | |
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. More... | |
const enum_type_decl * | is_enum_type (const type_or_decl_base *d) |
Test if a decl is an enum_type_decl. More... | |
enum_type_decl_sptr | is_enum_type (const type_or_decl_base_sptr &d) |
Test if a decl is an enum_type_decl. More... | |
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. More... | |
bool | is_function_decl (const type_or_decl_base &d) |
Test whether a declaration is a function_decl. More... | |
function_decl * | is_function_decl (const type_or_decl_base *d) |
Test whether a declaration is a function_decl. More... | |
function_decl_sptr | is_function_decl (const type_or_decl_base_sptr &d) |
Test whether a declaration is a function_decl. More... | |
function_decl::parameter * | is_function_parameter (const type_or_decl_base *tod) |
Test whether a declaration is a function_decl. More... | |
function_decl::parameter_sptr | is_function_parameter (const type_or_decl_base_sptr tod) |
Test whether an ABI artifact is a function_decl. More... | |
bool | is_function_template_pattern (const decl_base_sptr) |
bool | is_function_template_pattern (const shared_ptr< decl_base > decl) |
Test whether a decl is the pattern of a function template. More... | |
const function_type * | is_function_type (const type_or_decl_base *t) |
Test whether a type is a function_type. More... | |
function_type_sptr | is_function_type (const type_or_decl_base_sptr &t) |
Test whether a type is a function_type. More... | |
function_type * | is_function_type (type_or_decl_base *t) |
Test whether a type is a function_type. More... | |
bool | is_global_scope (const scope_decl &scope) |
Tests whether if a given scope is the global scope. More... | |
const global_scope * | is_global_scope (const scope_decl *scope) |
Tests whether if a given scope is the global scope. More... | |
bool | is_global_scope (const scope_decl_sptr) |
bool | is_global_scope (const shared_ptr< scope_decl >scope) |
Tests whether if a given scope is the global scope. More... | |
type_decl * | is_integral_type (const type_or_decl_base *t) |
Test if a type is an integral type. More... | |
type_decl_sptr | is_integral_type (const type_or_decl_base_sptr &t) |
Test if a type is an integral type. More... | |
bool | is_java_language (translation_unit::language l) |
Test if a language enumerator designates the Java language. More... | |
bool | is_member_decl (const decl_base &d) |
Tests if a declaration is a class member. More... | |
bool | is_member_decl (const decl_base *d) |
Tests if a declaration is a class member. More... | |
bool | is_member_decl (const decl_base_sptr d) |
Tests if a declaration is a class member. More... | |
bool | is_member_function (const function_decl &f) |
Test whether a function_decl is a member function. More... | |
bool | is_member_function (const function_decl *f) |
Test whether a function_decl is a member function. More... | |
bool | is_member_function (const function_decl_sptr &f) |
Test whether a function_decl is a member function. More... | |
bool | is_member_type (const type_base_sptr &t) |
Tests if a type is a class member. More... | |
method_decl * | is_method_decl (const type_or_decl_base &d) |
Test if a function_decl is actually a method_decl. More... | |
method_decl * | is_method_decl (const type_or_decl_base *d) |
Test if a function_decl is actually a method_decl. More... | |
method_decl_sptr | is_method_decl (const type_or_decl_base_sptr &d) |
Test if a function_decl is actually a method_decl. More... | |
const method_type * | is_method_type (const type_or_decl_base *t) |
Test whether a type is a method_type. More... | |
method_type_sptr | is_method_type (const type_or_decl_base_sptr &t) |
Test whether a type is a method_type. More... | |
method_type * | is_method_type (type_or_decl_base *t) |
Test whether a type is a method_type. More... | |
namespace_decl * | is_namespace (const decl_base *d) |
Tests if a declaration is a namespace declaration. More... | |
namespace_decl_sptr | is_namespace (const decl_base_sptr &d) |
Tests if a declaration is a namespace declaration. More... | |
bool | is_non_canonicalized_type (const type_base *t) |
Test if a given type is allowed to be non canonicalized. More... | |
bool | is_non_canonicalized_type (const type_base_sptr &t) |
Test if a given type is allowed to be non canonicalized. More... | |
bool | is_npaf_type (const type_base_sptr &t) |
Test if a type is a neither a pointer, an array nor a function type. More... | |
pointer_type_def_sptr | is_pointer_to_array_type (const type_base_sptr &t) |
Test if a type is a pointer to array type. More... | |
pointer_type_def_sptr | is_pointer_to_function_type (const type_base_sptr &t) |
Test if a type is a pointer to function type. More... | |
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. More... | |
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. More... | |
const pointer_type_def * | is_pointer_type (const type_or_decl_base *t, bool look_through_qualifiers) |
Test whether a type is a pointer_type_def. More... | |
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. More... | |
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. More... | |
const ptr_to_mbr_type * | is_ptr_to_mbr_type (const type_or_decl_base *t, bool look_through_qualifiers) |
Test whether a type is a ptr_to_mbr_type. More... | |
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. More... | |
qualified_type_def * | is_qualified_type (const type_or_decl_base *t) |
Test whether a type is a reference_type_def. More... | |
qualified_type_def_sptr | is_qualified_type (const type_or_decl_base_sptr &t) |
Test whether a type is a qualified_type_def. More... | |
type_decl * | is_real_type (const type_or_decl_base *t) |
Test if a type is a real type. More... | |
type_decl_sptr | is_real_type (const type_or_decl_base_sptr &t) |
Test if a type is a real type. More... | |
const reference_type_def * | is_reference_type (const type_or_decl_base *t, bool look_through_qualifiers) |
Test whether a type is a reference_type_def. More... | |
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. More... | |
reference_type_def * | is_reference_type (type_or_decl_base *t, bool look_through_qualifiers) |
Test whether a type is a reference_type_def. More... | |
const scope_decl * | is_scope_decl (const decl_base *d) |
Test if a declaration is a scope_decl. More... | |
scope_decl_sptr | is_scope_decl (const decl_base_sptr &d) |
Test if a declaration is a scope_decl. More... | |
array_type_def::subrange_type * | is_subrange_type (const type_or_decl_base *type) |
Test if a type is an array_type_def::subrange_type. More... | |
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. More... | |
bool | is_template_decl (const decl_base_sptr &decl) |
Tests whether a decl is a template. More... | |
bool | is_template_decl (const decl_base_sptr) |
bool | is_template_parameter (const decl_base_sptr) |
bool | is_template_parameter (const shared_ptr< decl_base > decl) |
Tests whether a decl is a template parameter. More... | |
bool | is_template_parm_composition_type (const decl_base_sptr) |
bool | is_template_parm_composition_type (const shared_ptr< decl_base > decl) |
Tests whether a decl is a template parameter composition type. More... | |
bool | is_type (const type_or_decl_base &tod) |
Test whether a declaration is a type. More... | |
type_base * | is_type (const type_or_decl_base *t) |
Test whether a declaration is a type. More... | |
type_base_sptr | is_type (const type_or_decl_base_sptr &tod) |
Test whether a declaration is a type. More... | |
const type_decl * | is_type_decl (const type_or_decl_base *t) |
Test whether a type is a type_decl (a builtin type). More... | |
type_decl_sptr | is_type_decl (const type_or_decl_base_sptr &t) |
Test whether a type is a type_decl (a builtin type). More... | |
const typedef_decl * | is_typedef (const type_base *t) |
Test whether a type is a typedef. More... | |
const typedef_decl * | is_typedef (const type_or_decl_base *t) |
Test whether a type is a typedef. More... | |
typedef_decl_sptr | is_typedef (const type_or_decl_base_sptr t) |
Test whether a type is a typedef. More... | |
typedef_decl * | is_typedef (type_base *t) |
Test whether a type is a typedef. More... | |
array_type_def_sptr | is_typedef_of_array (const type_base_sptr &t) |
Test if a type is a typedef of an array. More... | |
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. More... | |
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. More... | |
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. More... | |
union_decl_sptr | is_union_type (const shared_ptr< type_or_decl_base > &t) |
Test if a type is a union_decl. More... | |
bool | is_union_type (const type_or_decl_base &t) |
Test if a type is a union_decl. More... | |
union_decl * | is_union_type (const type_or_decl_base *t) |
Test if a type is a union_decl. More... | |
union_decl_sptr | is_union_type (const type_or_decl_base_sptr &) |
bool | is_unique_type (const type_base *t) |
Test if a type is unique in the entire environment. More... | |
bool | is_unique_type (const type_base_sptr &t) |
Test if a type is unique in the entire environment. More... | |
bool | is_user_defined_type (const type_base *t) |
Test if a type is user-defined. More... | |
bool | is_user_defined_type (const type_base_sptr &t) |
Test if a type is user-defined. More... | |
var_decl * | is_var_decl (const type_or_decl_base *tod) |
Tests if a declaration is a variable declaration. More... | |
var_decl_sptr | is_var_decl (const type_or_decl_base_sptr &decl) |
Tests if a declaration is a variable declaration. More... | |
const type_base * | is_void_pointer_type (const type_base *t) |
Test if a type is a pointer to void type. More... | |
const type_base_sptr | is_void_pointer_type (const type_base_sptr &t) |
Test if a type is a pointer to void type. More... | |
const type_base * | is_void_pointer_type_equivalent (const type_base &type) |
Test if a type is equivalent to a pointer to void type. More... | |
const type_base * | is_void_pointer_type_equivalent (const type_base *type) |
Test if a type is equivalent to a pointer to void type. More... | |
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. More... | |
decl_base_sptr | look_through_decl_only (const decl_base &d) |
If a decl is decl-only get its definition. Otherwise, just return nil. More... | |
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. More... | |
decl_base * | look_through_decl_only (decl_base *d) |
If a decl is decl-only enum, get its definition. Otherwise, just return the initial decl. More... | |
class_or_union * | look_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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
type_base * | look_through_decl_only_type (type_base *t) |
If a type is is decl-only, then get its definition. Otherwise, just return the initial type. More... | |
array_type_def_sptr | lookup_array_type (const array_type_def &, const translation_unit &) |
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. More... | |
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. More... | |
array_type_def_sptr | lookup_array_type (const interned_string &type_name, const translation_unit &tu) |
Lookup an array type from a translation unit. More... | |
array_type_def_sptr | lookup_array_type (const string &, const 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. More... | |
type_decl_sptr | lookup_basic_type (const interned_string &type_name, const translation_unit &tu) |
Lookup a basic type from a translation unit. More... | |
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. More... | |
type_decl_sptr | lookup_basic_type (const string &type_name, const translation_unit &tu) |
Lookup a basic type from a translation unit. More... | |
type_decl_sptr | lookup_basic_type (const type_decl &, const 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. More... | |
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. More... | |
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. More... | |
type_base_sptr | lookup_class_or_typedef_type (const string &, const translation_unit &) |
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. More... | |
class_decl_sptr | lookup_class_type (const class_decl &, const translation_unit &) |
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. More... | |
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. More... | |
class_decl_sptr | lookup_class_type (const interned_string &type_name, const translation_unit &tu) |
Lookup a class type from a translation unit. More... | |
class_decl_sptr | lookup_class_type (const string &fqn, const translation_unit &tu) |
Lookup a class type from a translation unit. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
class_decl_sptr | lookup_class_type_through_scopes (const std::list< string > &, const translation_unit &) |
type_base_sptr | lookup_class_typedef_or_enum_type (const string &, const translation_unit &) |
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. More... | |
const type_base_wptrs_type * | lookup_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. More... | |
const type_base_wptrs_type * | lookup_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. More... | |
const var_decl * | lookup_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. More... | |
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. More... | |
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. More... | |
enum_type_decl_sptr | lookup_enum_type (const enum_type_decl &, const translation_unit &) |
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. More... | |
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. More... | |
enum_type_decl_sptr | lookup_enum_type (const interned_string &type_name, const translation_unit &tu) |
Lookup an enum type from a translation unit. More... | |
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. More... | |
enum_type_decl_sptr | lookup_enum_type (const string &type_name, const translation_unit &tu) |
Lookup an enum type from a translation unit. More... | |
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. More... | |
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. More... | |
const type_base_wptrs_type * | lookup_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. More... | |
const type_base_wptrs_type * | lookup_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. More... | |
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. More... | |
function_type_sptr | lookup_function_type (const function_type &t, const translation_unit &tu) |
Lookup a function type from a translation unit. More... | |
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. More... | |
function_type_sptr | lookup_function_type (const function_type_sptr &t, const translation_unit &tu) |
Lookup a function type from a translation unit. More... | |
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. More... | |
function_type_sptr | lookup_function_type (const interned_string &type_name, const translation_unit &tu) |
Lookup a function type from a translation unit. More... | |
function_type_sptr | lookup_function_type (const string &, const 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. More... | |
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. More... | |
pointer_type_def_sptr | lookup_pointer_type (const interned_string &type_name, const translation_unit &tu) |
Lookup a pointer type from a translation unit. More... | |
pointer_type_def_sptr | lookup_pointer_type (const pointer_type_def &, const 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. More... | |
pointer_type_def_sptr | lookup_pointer_type (const string &type_name, const translation_unit &tu) |
Lookup a pointer type from a translation unit. More... | |
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. More... | |
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. More... | |
qualified_type_def_sptr | lookup_qualified_type (const interned_string &type_name, const translation_unit &tu) |
Lookup a qualified type from a translation unit. More... | |
qualified_type_def_sptr | lookup_qualified_type (const qualified_type_def &, const 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. More... | |
qualified_type_def_sptr | lookup_qualified_type (const string &, const translation_unit &) |
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. More... | |
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. More... | |
reference_type_def_sptr | lookup_reference_type (const interned_string &type_name, const translation_unit &tu) |
Lookup a reference type from a translation unit. More... | |
const reference_type_def_sptr | lookup_reference_type (const reference_type_def &, const 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. More... | |
const reference_type_def_sptr | lookup_reference_type (const string &, const translation_unit &) |
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. More... | |
const type_base_sptr | lookup_type (const interned_string &fqn, const translation_unit &tu) |
Lookup a type in a translation unit. More... | |
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. More... | |
type_base_sptr | lookup_type (const string &fqn, const translation_unit &tu) |
Lookup a type in a translation unit, starting from the global namespace. More... | |
type_base_sptr | lookup_type (const type_base &t, const corpus &corp) |
Look into a given corpus to find a type. More... | |
type_base_sptr | lookup_type (const type_base_sptr &t, const corpus &corp) |
Look into a given corpus to find a type. More... | |
const type_base_sptr | lookup_type (const type_base_sptr type, const translation_unit &tu) |
Lookup a type from a translation unit. More... | |
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. More... | |
const type_base_sptr | lookup_type_in_scope (const list< string > &comps, const scope_decl_sptr &scope) |
lookup a type in a scope. More... | |
const type_base_sptr | lookup_type_in_scope (const std::list< string > &, const scope_decl_sptr &) |
const type_base_sptr | lookup_type_in_scope (const string &fqn, const scope_decl_sptr &skope) |
Lookup a type in a scope. More... | |
type_base_sptr | lookup_type_per_location (const interned_string &loc, const corpus &corp) |
Lookup a type from a corpus, by its location. More... | |
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. More... | |
type_base_sptr | lookup_type_through_scopes (const std::list< string > &, const translation_unit &) |
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. More... | |
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. More... | |
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. More... | |
typedef_decl_sptr | lookup_typedef_type (const interned_string &type_name, const translation_unit &tu) |
Lookup a typedef type from a translation unit. More... | |
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. More... | |
typedef_decl_sptr | lookup_typedef_type (const string &type_name, const translation_unit &tu) |
Lookup a typedef type from a translation unit. More... | |
typedef_decl_sptr | lookup_typedef_type (const typedef_decl &, const 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. More... | |
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. More... | |
typedef_decl_sptr | lookup_typedef_type_per_location (const string &loc, const corpus &corp) |
Lookup a typedef_decl from a corpus, by its location. More... | |
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. More... | |
union_decl_sptr | lookup_union_type (const interned_string &type_name, const translation_unit &tu) |
Lookup a union type from a translation unit. More... | |
union_decl_sptr | lookup_union_type (const string &fqn, const translation_unit &tu) |
Lookup a union type from a translation unit. More... | |
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. More... | |
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. More... | |
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. More... | |
const type_base_wptrs_type * | lookup_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. More... | |
const type_base_wptrs_type * | lookup_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. More... | |
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. More... | |
const decl_base_sptr | lookup_var_decl_in_scope (const string &fqn, const scope_decl_sptr &skope) |
Lookup a var_decl in a scope. More... | |
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. More... | |
template<typename T > | |
void | mark_types_as_being_compared (T &l, T &r) |
Mark a pair of types as being compared. More... | |
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. More... | |
template<typename T > | |
T * | maybe_get_canonical_type (T *t) |
Get the canonical type of a given type T* as a T*. More... | |
void | maybe_update_scope_lookup_map (const decl_base_sptr &member_scope) |
void | maybe_update_scope_lookup_map (const scope_decl_sptr &member_scope) |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
void | maybe_update_types_lookup_map (scope_decl *scope, const function_type_sptr &function_type) |
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: More... | |
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: More... | |
bool | member_function_has_vtable_offset (const function_decl &f) |
Test if a virtual member function has a vtable offset set. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
bool | operator!= (const decl_base_sptr &l, const decl_base_sptr &r) |
Inequality operator of shared_ptr of decl_base. More... | |
bool | operator!= (const elf_symbol_sptr &lhs, const elf_symbol_sptr &rhs) |
Inequality operator for smart pointers to elf_symbol. More... | |
bool | operator!= (const enum_type_decl_sptr &l, const enum_type_decl_sptr &r) |
Inequality operator for enum_type_decl_sptr. More... | |
bool | operator!= (const function_decl::parameter_sptr &l, const function_decl::parameter_sptr &r) |
Non-member inequality operator for function_decl::parameter. More... | |
bool | operator!= (const function_decl_sptr &l, const function_decl_sptr &r) |
A deep inequality operator for smart pointers to functions. More... | |
bool | operator!= (const member_class_template_sptr &l, const member_class_template_sptr &r) |
Inequality operator for the member_class_template type. More... | |
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. More... | |
bool | operator!= (const method_decl_sptr &l, const method_decl_sptr &r) |
Inequality operator for method_decl_sptr. More... | |
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. More... | |
bool | operator!= (const qualified_type_def_sptr &l, const qualified_type_def_sptr &r) |
Non-member inequality operator for qualified_type_def. More... | |
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. More... | |
bool | operator!= (const scope_decl_sptr &l, const scope_decl_sptr &r) |
Inequality operator for scope_decl_sptr. More... | |
bool | operator!= (const translation_unit_sptr &l, const translation_unit_sptr &r) |
A deep inequality operator for pointers to translation units. More... | |
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.. More... | |
bool | operator!= (const type_decl_sptr &l, const type_decl_sptr &r) |
Inequality operator for type_decl_sptr. More... | |
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. More... | |
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. More... | |
change_kind | operator& (change_kind l, change_kind r) |
corpus::origin | operator& (corpus::origin l, corpus::origin r) |
Bitwise & operator for the corpus::origin type. More... | |
qualified_type_def::CV | operator& (qualified_type_def::CV lhs, qualified_type_def::CV rhs) |
Overloaded bitwise AND operator for CV qualifiers. More... | |
real_type::modifiers_type | operator& (real_type::modifiers_type l, real_type::modifiers_type r) |
Bitwise AND operator for real_type::modifiers_type. More... | |
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. More... | |
change_kind & | operator&= (change_kind &l, change_kind r) |
corpus::origin | operator&= (corpus::origin &l, corpus::origin r) |
Bitwise &= operator for the corpus::origin type. More... | |
qualified_type_def::CV & | operator&= (qualified_type_def::CV &l, qualified_type_def::CV r) |
Overloaded bitwise &= operator for cv qualifiers. More... | |
real_type::modifiers_type & | operator&= (real_type::modifiers_type &l, real_type::modifiers_type r) |
Bitwise &= operator for real_type::modifiers_type. More... | |
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 "A&=" operator for the type_or_decl_base::type_or_decl_kind bitmap type. More... | |
std::ostream & | operator<< (std::ostream &o, access_specifier a) |
Streaming operator for class_decl::access_specifier. More... | |
std::ostream & | operator<< (std::ostream &o, decl_base::binding b) |
Streaming operator for decl_base::binding. More... | |
std::ostream & | operator<< (std::ostream &o, decl_base::visibility v) |
Streaming operator for the decl_base::visibility. More... | |
std::ostream & | operator<< (std::ostream &o, elf_symbol::binding b) |
Serialize an instance of symbol_binding and stream it to a given output stream. More... | |
std::ostream & | operator<< (std::ostream &o, elf_symbol::type t) |
Serialize an instance of symbol_type and stream it to a given output stream. More... | |
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. More... | |
std::ostream & | operator<< (std::ostream &o, qualified_type_def::CV cv) |
Streaming operator for qualified_type_decl::CV. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
bool | operator== (const elf_symbol_sptr &lhs, const elf_symbol_sptr &rhs) |
Equality operator for smart pointers to elf_symbol. More... | |
bool | operator== (const enum_type_decl_sptr &l, const enum_type_decl_sptr &r) |
Equality operator for enum_type_decl_sptr. More... | |
bool | operator== (const function_decl::parameter_sptr &l, const function_decl::parameter_sptr &r) |
Non-member equality operator for function_decl::parameter. More... | |
bool | operator== (const function_decl_sptr &l, const function_decl_sptr &r) |
A deep comparison operator for a shared pointer to function_decl. More... | |
bool | operator== (const member_class_template_sptr &l, const member_class_template_sptr &r) |
Comparison operator for the member_class_template type. More... | |
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. More... | |
bool | operator== (const method_decl_sptr &l, const method_decl_sptr &r) |
Equality operator for method_decl_sptr. More... | |
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. More... | |
bool | operator== (const qualified_type_def_sptr &l, const qualified_type_def_sptr &r) |
Non-member equality operator for qualified_type_def. More... | |
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. More... | |
bool | operator== (const scope_decl_sptr &l, const scope_decl_sptr &r) |
Equality operator for scope_decl_sptr. More... | |
bool | operator== (const translation_unit_sptr &l, const translation_unit_sptr &r) |
A deep comparison operator for pointers to translation units. More... | |
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. More... | |
bool | operator== (const type_decl_sptr &l, const type_decl_sptr &r) |
Equality operator for type_decl_sptr. More... | |
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. More... | |
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. More... | |
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. More... | |
change_kind | operator| (change_kind l, change_kind r) |
corpus::origin | operator| (corpus::origin l, corpus::origin r) |
Bitwise | operator for the corpus::origin type. More... | |
qualified_type_def::CV | operator| (qualified_type_def::CV lhs, qualified_type_def::CV rhs) |
Overloaded bitwise OR operator for cv qualifiers. More... | |
real_type::modifiers_type | operator| (real_type::modifiers_type l, real_type::modifiers_type r) |
Bitwise OR operator for real_type::modifiers_type. More... | |
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. More... | |
change_kind & | operator|= (change_kind &l, change_kind r) |
corpus::origin | operator|= (corpus::origin &l, corpus::origin r) |
Bitwise |= operator for the corpus::origin type. More... | |
qualified_type_def::CV & | operator|= (qualified_type_def::CV &l, qualified_type_def::CV r) |
Overloaded bitwise |= operator for cv qualifiers. More... | |
real_type::modifiers_type & | operator|= (real_type::modifiers_type &l, real_type::modifiers_type r) |
Bitwise |= operator for real_type::modifiers_type. More... | |
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 "|=" operator for the type_or_decl_base::type_or_decl_kind bitmap type. More... | |
qualified_type_def::CV | operator~ (qualified_type_def::CV q) |
Overloaded bitwise inverting operator for CV qualifiers. More... | |
real_type::modifiers_type | operator~ (real_type::modifiers_type l) |
Bitwise one's complement operator for real_type::modifiers_type. More... | |
bool | parse_real_type (const string &str, real_type &type) |
Parse a real type from a string. More... | |
hash_t | peek_hash_value (const type_or_decl_base &artefact) |
Get the hash value associated to an IR node. More... | |
const type_base * | peel_array_type (const type_base *type) |
Return the leaf element type of an array. More... | |
const type_base_sptr | peel_array_type (const type_base_sptr &type) |
Return the leaf element type of an array. More... | |
type_base_sptr | peel_const_qualified_type (const qualified_type_def_sptr &q) |
If a qualified type is const, then return its underlying type. More... | |
type_base * | peel_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. More... | |
const type_base * | peel_pointer_type (const type_base *type) |
Return the leaf pointed-to type node of a pointer_type_def node. More... | |
type_base_sptr | peel_pointer_type (const type_base_sptr &type) |
Return the leaf pointed-to type node of a pointer_type_def node. More... | |
type_base * | peel_qualified_or_typedef_type (const type_base *type) |
Return the leaf underlying type of a qualified or typedef type. More... | |
type_base_sptr | peel_qualified_or_typedef_type (const type_base_sptr &t) |
Return the leaf underlying type of a qualified or typedef type. More... | |
const type_base * | peel_qualified_type (const type_base *type) |
Return the leaf underlying type of a qualified type. More... | |
const type_base_sptr | peel_qualified_type (const type_base_sptr &type) |
Return the leaf underlying type of a qualified type. More... | |
const type_base * | peel_reference_type (const type_base *type) |
Return the leaf pointed-to type node of a reference_type_def node. More... | |
type_base_sptr | peel_reference_type (const type_base_sptr &type) |
Return the leaf pointed-to type node of a reference_type_def node. More... | |
type_base * | peel_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. More... | |
type_base * | peel_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. More... | |
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. More... | |
const type_base * | peel_typedef_type (const type_base *type) |
Return the leaf underlying type node of a typedef_decl node. More... | |
type_base_sptr | peel_typedef_type (const type_base_sptr &type) |
Return the leaf underlying type node of a typedef_decl node. More... | |
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. More... | |
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. More... | |
void | remove_decl_from_scope (decl_base_sptr decl) |
Remove a given decl from its scope. More... | |
template<typename T > | |
bool | return_comparison_result (T &l, T &r, bool value) |
Return the result of the comparison of two (sub) types. More... | |
void | set_data_member_is_laid_out (var_decl_sptr m, bool l) |
Set a flag saying if a data member is laid out. More... | |
void | set_data_member_offset (var_decl_sptr m, uint64_t o) |
Set the offset of a data member into its containing class. More... | |
void | set_member_access_specifier (const decl_base_sptr &d, access_specifier a) |
Sets the access specifier for a class member. More... | |
void | set_member_access_specifier (decl_base &d, access_specifier a) |
Sets the access specifier for a class member. More... | |
void | set_member_function_is_const (const function_decl_sptr &f, bool is_const) |
set the const-ness property of a member function. More... | |
void | set_member_function_is_const (function_decl &f, bool is_const) |
set the const-ness property of a member function. More... | |
void | set_member_function_is_ctor (const function_decl &, bool) |
void | set_member_function_is_ctor (const function_decl_sptr &f, bool c) |
Setter for the is_ctor property of the member function. More... | |
void | set_member_function_is_ctor (function_decl &f, bool c) |
Setter for the is_ctor property of the member function. More... | |
void | set_member_function_is_dtor (const function_decl_sptr &f, bool d) |
Set the destructor-ness property of a member function. More... | |
void | set_member_function_is_dtor (function_decl &f, bool d) |
Set the destructor-ness property of a member function. More... | |
void | set_member_function_virtuality (const function_decl_sptr &fn, bool is_virtual, ssize_t voffset) |
Set the virtual-ness of a member fcuntion. More... | |
void | set_member_function_virtuality (function_decl &fn, bool is_virtual, ssize_t voffset) |
Set the virtual-ness of a member fcuntion. More... | |
void | set_member_function_virtuality (function_decl *fn, bool is_virtual, ssize_t voffset) |
Set the virtual-ness of a member fcuntion. More... | |
void | set_member_is_static (const decl_base_sptr &d, bool s) |
Sets the static-ness property of a class member. More... | |
void | set_member_is_static (decl_base &d, bool s) |
Sets the static-ness property of a class member. More... | |
template<typename T > | |
hash_t | set_or_get_cached_hash_value (const T &tod) |
Set the hash value of an IR node and return it. More... | |
template<typename T > | |
hash_t | set_or_get_cached_hash_value (const T *artifact) |
Set the hash value of an IR node and return it. More... | |
template<typename IteratorType , typename deref_lambda > | |
void | sort_and_canonicalize_types (IteratorType begin, IteratorType end, deref_lambda deref) |
Sort and canonicalize a sequence of types. More... | |
void | sort_types (const canonical_type_sptr_set_type &types, vector< type_base_sptr > &result) |
Sort types in a hopefully stable manner. More... | |
template<typename IteratorType > | |
void | sort_types_for_hash_computing_and_c14n (IteratorType begin, IteratorType end) |
Sort types before hashing (and then canonicalizing) them. More... | |
void | sort_types_for_hash_computing_and_c14n (vector< type_base_sptr > &types) |
Sort types right before hashing and canonicalizing them. More... | |
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. More... | |
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. More... | |
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. More... | |
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. More... | |
void | strip_redundant_quals_from_underyling_types (const qualified_type_def_sptr &t) |
Merge redundant qualifiers from a tree of qualified types. More... | |
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. More... | |
decl_base_sptr | strip_useless_const_qualification (const qualified_type_def_sptr t) |
Strip qualification from a qualified type, when it makes sense. More... | |
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. More... | |
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. More... | |
string | translation_unit_language_to_string (translation_unit::language l) |
Converts a translation_unit::language enumerator into a string. More... | |
template<typename T > | |
bool | try_canonical_compare (const T *l, const T *r) |
Compare two types by comparing their canonical types if present. More... | |
type_base * | type_has_non_canonicalized_subtype (type_base_sptr t) |
Test if a type has sub-types that are non-canonicalized. More... | |
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. More... | |
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. More... | |
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. More... | |
bool | type_originates_from_corpus (type_base_sptr t, corpus_sptr &c) |
Test if a type originates from a corpus. More... | |
bool | types_are_compatible (const decl_base_sptr d1, const decl_base_sptr d2) |
Test if two types are equal modulo a typedef. More... | |
bool | types_are_compatible (const type_base_sptr type1, const type_base_sptr type2) |
Test if two types are equal modulo a typedef or CV qualifiers. More... | |
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. More... | |
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. More... | |
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. More... | |
template<typename T > | |
void | unmark_types_as_being_compared (T &l, T &r) |
Mark a pair of types as being not compared anymore. More... | |
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. More... | |
The namespace of the internal representation of ABI artifacts like types and decls.
typedef shared_ptr<array_type_def> array_type_def_sptr |
Convenience typedef for a shared pointer on a array_type_def.
typedef unordered_set<const type_or_decl_base*, type_or_decl_hash, type_or_decl_equal> artifact_ptr_set_type |
typedef unordered_set<type_or_decl_base_sptr, type_or_decl_hash, type_or_decl_equal> artifact_sptr_set_type |
typedef unordered_set<type_base_sptr, canonical_type_hash> canonical_type_sptr_set_type |
typedef shared_ptr<class_decl> class_decl_sptr |
Convenience typedef for a shared pointer on a class_decl.
typedef weak_ptr<class_decl> class_decl_wptr |
Convenience typedef for a weak pointer on a class_decl.
typedef shared_ptr<class_or_union> class_or_union_sptr |
typedef weak_ptr<class_or_union> class_or_union_wptr |
typedef unordered_set<const class_or_union*> class_set_type |
A convenience typedef for a set of pointer to class_or_union.
Definition at line 526 of file abg-ir-priv.h.
typedef shared_ptr<class_tdecl> class_tdecl_sptr |
Convenience typedef for a shared pointer on a class_tdecl.
typedef vector<class_or_union_sptr> classes_or_unions_type |
typedef vector<class_decl_sptr> classes_type |
Convenience typedef for a vector of class_decl_sptr.
typedef shared_ptr<context_rel> context_rel_sptr |
A convenience typedef for shared pointers to context_rel.
typedef shared_ptr<corpus_group> corpus_group_sptr |
typedef weak_ptr<corpus> corpus_wptr |
typedef weak_ptr<decl_base> decl_base_wptr |
typedef shared_ptr<dm_context_rel> dm_context_rel_sptr |
A convenience typedef for a shared pointer to dm_context_rel.
typedef shared_ptr<elf_symbol> elf_symbol_sptr |
A convenience typedef for a shared pointer to elf_symbol.
typedef weak_ptr<elf_symbol> elf_symbol_wptr |
A convenience typedef for a weak pointer to elf_symbol.
typedef std::vector<elf_symbol_sptr> elf_symbols |
Convenience typedef for a vector of elf_symbol.
typedef shared_ptr<enum_type_decl> enum_type_decl_sptr |
Convenience typedef for shared pointer to a enum_type_decl.
typedef vector<enum_type_decl_sptr> enums_type |
Convenience typedef for a vector of enum_type_decl_sptr.
typedef shared_ptr<environment> environment_sptr |
Convenience typedef for a shared pointer to an environment.
typedef unordered_map<const function_decl*, bool, function_decl::hash, function_decl::ptr_equal> fn_ptr_map_type |
Convenience typedef for a hash map of pointer to function_decl and boolean.
Definition at line 221 of file abg-corpus.cc.
typedef unordered_set<const function_type*> fn_set_type |
A convenience typedef for a set of pointer to function_type.
Definition at line 529 of file abg-ir-priv.h.
typedef unordered_map<function_type_sptr, bool, function_type::hash, type_shared_ptr_equal> fn_type_ptr_map |
typedef unordered_map<const function_decl*, string, function_decl_hash, function_decl::ptr_equal> fns_to_str_map_type |
Convenience typedef for a hash map of pointer to function_decl and string.
typedef shared_ptr<function_decl> function_decl_sptr |
Convenience typedef for a shared pointer on a function_decl.
typedef shared_ptr<function_tdecl> function_tdecl_sptr |
Convenience typedef for a shared pointer on a function_tdecl.
typedef shared_ptr<function_type> function_type_sptr |
Convenience typedef for a shared pointer on a function_type.
typedef weak_ptr<function_type> function_type_wptr |
Convenience typedef for a weak pointer on a function_type.
typedef vector<function_type_sptr> function_types_type |
Convenience typedef fo a vector of function_type_sptr.
typedef shared_ptr<global_scope> global_scope_sptr |
Convenience typedef for shared pointer on global_scope.
typedef abg_compat::optional<uint64_t> hash_t |
typedef unordered_map<interned_string, bool, hash_interned_string> interned_string_bool_map_type |
Convenience typedef for a map of interned_string -> bool.
typedef shared_ptr<ir_traversable_base> ir_traversable_base_sptr |
Convenience typedef for a shared pointer to ir_traversable_base.
typedef unordered_map<interned_string, std::unordered_set<function_decl*>, hash_interned_string> istr_fn_ptr_set_map_type |
Convenience typedef for a hash map which key is an interned_string and which data is a set of abigail::ir::function_decl*.
Definition at line 54 of file abg-corpus-priv.h.
typedef unordered_map<interned_string, var_decl_sptr, hash_interned_string> istr_var_ptr_map_type |
Convenience typedef for a hash map which key is an interned_string and which data is an abigail::ir::var_decl*.
Definition at line 64 of file abg-corpus-priv.h.
typedef unordered_map<interned_string, std::unordered_set<var_decl_sptr>, hash_interned_string> istr_var_ptr_set_map_type |
Convenience typedef for a hash map which key is an interned_string and which data is a set of abigail::ir::var_decl_sptr.
Definition at line 70 of file abg-corpus-priv.h.
typedef unordered_map<interned_string, const function_decl*, hash_interned_string> istring_function_decl_ptr_map_type |
typedef unordered_map<interned_string, type_base_wptr, hash_interned_string> istring_type_base_wptr_map_type |
A convenience typedef for a map which key is an interned_string and which value is a type_base_wptr.
typedef unordered_map<interned_string, type_base_wptrs_type, hash_interned_string> istring_type_base_wptrs_map_type |
A convenience typedef for a map which key is an interned_string and which value is a vector of type_base_wptr.
typedef unordered_map<interned_string, type_or_decl_base_sptr, hash_interned_string> istring_type_or_decl_base_sptr_map_type |
A convenience typedef for a map which key is an interned_string and which value is a type_base_wptr.
typedef unordered_map<interned_string, var_decl_sptr, hash_interned_string> istring_var_decl_ptr_map_type |
typedef shared_ptr<mem_fn_context_rel> mem_fn_context_rel_sptr |
A convenience typedef for a shared pointer to mem_fn_context_rel.
typedef shared_ptr<member_class_template> member_class_template_sptr |
typedef vector<member_class_template_sptr> member_class_templates |
typedef shared_ptr<member_function_template> member_function_template_sptr |
typedef vector<member_function_template_sptr> member_function_templates |
typedef shared_ptr<method_decl> method_decl_sptr |
typedef shared_ptr<method_type> method_type_sptr |
Convenience typedef for shared pointer to method_type.
typedef shared_ptr<namespace_decl> namespace_decl_sptr |
Convenience typedef for a shared pointer on namespace_decl.
typedef vector<namespace_decl_sptr> namespaces_type |
A convenience typedef for vectors of namespace_decl_sptr.
typedef shared_ptr<non_type_tparameter> non_type_tparameter_sptr |
typedef unordered_set<uintptr_t> pointer_set |
typedef shared_ptr<pointer_type_def> pointer_type_def_sptr |
Convenience typedef for a shared pointer on a pointer_type_def.
typedef shared_ptr<ptr_to_mbr_type> ptr_to_mbr_type_sptr |
Convenience typedef for a shared pointer to a ptr_to_mbr_type.
typedef shared_ptr<qualified_type_def> qualified_type_def_sptr |
typedef shared_ptr<reference_type_def> reference_type_def_sptr |
Convenience typedef for a shared pointer on a reference_type_def.
typedef vector<regex_t_sptr> regex_t_sptrs_type |
A convenience typedef for std::vector<regex_t_sptr>.
Definition at line 37 of file abg-corpus-priv.h.
typedef shared_ptr<scope_decl> scope_decl_sptr |
Convenience typedef for a shared pointer on a scope_decl.
typedef unordered_map<string, const function_decl*> str_fn_ptr_map_type |
Convenience typedef for a hash map of string and pointer to function_decl.
Definition at line 225 of file abg-corpus.cc.
typedef unordered_map<string, std::unordered_set<function_decl*> > str_fn_ptr_set_map_type |
Convenience typedef for a hash map which key is a string and which data is a set of abigail::ir::function_decl*.
Definition at line 48 of file abg-corpus-priv.h.
typedef unordered_map<string, vector<function_decl*> > str_fn_ptrs_map_type |
Convenience typedef for a hash map which key is a string and which data is a vector of abigail::ir::function_decl*.
Definition at line 43 of file abg-corpus-priv.h.
typedef unordered_map<string, var_decl_sptr> str_var_ptr_map_type |
Convenience typedef for a hash map which key is a string and which data is an abigail::ir::var_decl*.
Definition at line 58 of file abg-corpus-priv.h.
typedef unordered_map<string, decl_base_sptr> string_decl_base_sptr_map |
typedef shared_ptr<string_elf_symbol_sptr_map_type> string_elf_symbol_sptr_map_sptr |
typedef std::unordered_map<string, elf_symbol_sptr> string_elf_symbol_sptr_map_type |
typedef shared_ptr<string_elf_symbols_map_type> string_elf_symbols_map_sptr |
typedef std::unordered_map<string, elf_symbols> string_elf_symbols_map_type |
Convenience typedef for a map which key is a string and which value is a vector of elf_symbol.
typedef unordered_map<string, translation_unit_sptr> string_tu_map_type |
typedef unordered_map<string, type_base_sptr> string_type_base_sptr_map_type |
typedef unordered_map<string, type_base_wptr> string_type_base_wptr_map_type |
A convenience typedef for a map which key is a string and which value is a type_base_wptr.
typedef shared_ptr<template_decl> template_decl_sptr |
Convenience typedef for a shared pointer to template_decl.
typedef weak_ptr<template_decl> template_decl_wptr |
Convenience typedef for a weak pointer to template_decl.
typedef shared_ptr<template_parameter> template_parameter_sptr |
typedef shared_ptr<template_tparameter> template_tparameter_sptr |
Convenience typedef for a shared_ptr to template_tparameter.
typedef shared_ptr<translation_unit> translation_unit_sptr |
Convenience typedef for a shared pointer on a translation_unit type.
typedef std::set<translation_unit_sptr, shared_translation_unit_comp> translation_units |
Convenience typedef for an ordered set of translation_unit_sptr.
typedef vector<type_base*> type_base_ptrs_type |
typedef vector<type_base_sptr> type_base_sptrs_type |
typedef weak_ptr<type_base> type_base_wptr |
typedef vector<type_base_wptr> type_base_wptrs_type |
typedef unordered_map<uint64_t_pair_type, bool, uint64_t_pair_hash> type_comparison_result_type |
A convenience typedef for a map which key is a pair of uint64_t and which value is a boolean. This is initially intended to cache the result of comparing two (sub-)types.
Definition at line 535 of file abg-ir-priv.h.
typedef shared_ptr<type_composition> type_composition_sptr |
Convenience typedef for shared pointer to type_composition.
typedef shared_ptr<type_decl> type_decl_sptr |
typedef shared_ptr<type_or_decl_base> type_or_decl_base_sptr |
A convenience typedef for a shared_ptr to type_or_decl_base.
typedef shared_ptr<type_tparameter> type_tparameter_sptr |
Convenience typedef for a shared pointer to type_tparameter.
typedef shared_ptr<typedef_decl> typedef_decl_sptr |
Convenience typedef for a shared pointer on a typedef_decl.
typedef weak_ptr<typedef_decl> typedef_decl_wptr |
Convenience typedef for a weak pointer on a typedef_decl.
typedef std::pair<uint64_t, uint64_t> uint64_t_pair_type |
A convenience typedef for a pair of uint64_t which is initially intended to store a pair of pointer values.
Definition at line 519 of file abg-ir-priv.h.
typedef unordered_set<uint64_t_pair_type, uint64_t_pair_hash> uint64_t_pairs_set_type |
A convenience typedef for a set of uint64_t_pair.
Definition at line 523 of file abg-ir-priv.h.
typedef shared_ptr<union_decl> union_decl_sptr |
typedef shared_ptr<var_decl> var_decl_sptr |
typedef weak_ptr<var_decl> var_decl_wptr |
typedef unordered_map<const var_decl*, bool, var_decl::hash, var_decl::ptr_equal> var_ptr_map_type |
Convenience typedef for a hash map of pointer to var_decl and boolean.
Definition at line 231 of file abg-corpus.cc.
enum access_specifier |
enum change_kind |
A bitfield that gives callers of abigail::ir::equals() some insight about how different two internal representation artifacts are.
enum comparison_result |
The result of structural comparison of type ABI artifacts.
Definition at line 34 of file abg-ir-priv.h.
enum lookup_entity_kind |
decl_base_sptr add_decl_to_scope | ( | decl_base_sptr | decl, |
const scope_decl_sptr & | scope | ||
) |
decl_base_sptr add_decl_to_scope | ( | decl_base_sptr | decl, |
scope_decl * | scope | ||
) |
bool anonymous_data_member_exists_in_class | ( | const var_decl & | anon_dm, |
const class_or_union & | clazz | ||
) |
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.
d | the anonymous data member to consider. |
d
. class_or_union * anonymous_data_member_to_class_or_union | ( | const var_decl * | d | ) |
Get the class_or_union type of a given anonymous data member.
d | the anonymous data member to consider. |
d
. 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.
d | the anonymous data member to consider. |
d
. string build_internal_underlying_enum_type_name | ( | const string & | base_name, |
bool | is_anonymous, | ||
uint64_t | size | ||
) |
string build_qualified_name | ( | const scope_decl * | scope, |
const string & | name | ||
) |
string build_qualified_name | ( | const scope_decl * | scope, |
const type_base_sptr & | type | ||
) |
type_base_sptr canonicalize | ( | type_base_sptr | t, |
bool | do_log, | ||
bool | show_stats | ||
) |
Compute the canonical type of a given type.
It means that after invoking this function, comparing the intance instance type_base and another one (on which type_base::enable_canonical_equality() would have been invoked as well) is performed by just comparing the pointer values of the canonical types of both types. That equality comparison is supposedly faster than structural comparison of the types.
t | a smart pointer to the instance of type_base for which to compute the canonical type. After this call, t->get_canonical_type() will return the newly computed canonical type. |
do_log | if true then logs are emitted about canonicalization progress. |
show_stats | if true and if do_log is true as well, then more detailed logs are emitted about canonicalization. |
t
. void canonicalize_types | ( | const input_iterator & | begin, |
const input_iterator & | end, | ||
deref_lambda | deref, | ||
bool | do_log = false , |
||
bool | show_stats = false |
||
) |
Compute the canonical type for all the IR types of the system.
After invoking this function, the time it takes to compare two types of the IR is equivalent to the time it takes to compare their pointer value. That is faster than performing a structural (A.K.A. member-wise) comparison.
Note that this function performs some sanity checks after* the canonicalization process. It ensures that at the end of the canonicalization process, all types have been canonicalized. This is important because the canonicalization algorithm sometimes clears some canonical types after having speculatively set them for performance purposes. At the end of the process however, all types must be canonicalized, and this function detects violations of that assertion.
input_iterator | the type of the input iterator of the beging and end . |
deref_lambda | a lambda function which takes in parameter the input iterator of type input_iterator and dereferences it to return the type to canonicalize. |
begin | an iterator pointing to the first type of the set of types to canonicalize. |
end | an iterator pointing past-the-end (after the last type) of the set of types to canonicalize. |
deref | a lambda function that knows how to dereference the iterator begin to return the type to canonicalize. |
Definition at line 1461 of file abg-ir-priv.h.
bool class_or_union_types_of_same_kind | ( | const class_or_union * | first, |
const class_or_union * | second | ||
) |
bool class_or_union_types_of_same_kind | ( | const class_or_union_sptr & | first, |
const class_or_union_sptr & | second | ||
) |
bool classes_have_same_layout | ( | const type_base_sptr & | f, |
const type_base_sptr & | s | ||
) |
Test if two classes have the same layout.
Test if all the types and offsets of the members are equal, regardless of their access modifiers.
f | the first class to take into account. |
s | the second class to take into account. |
s
and f
are class types with the same layout. array_type_def_sptr clone_array | ( | const array_type_def_sptr & | array | ) |
Clone an array type.
Note that the element type of the new array is shared witht the old one.
array | the array type to clone. |
type_base_sptr clone_array_tree | ( | const type_base_sptr | t | ) |
Clone a type tree made of an array or a typedef of array.
Note that this can be a tree which root node is a typedef an which sub-tree can be any arbitrary combination of typedef, qualified type and arrays.
t | the array or typedef of qualified array to consider. |
t
. qualified_type_def_sptr clone_qualified_type | ( | const qualified_type_def_sptr & | t | ) |
Clone a qualifiend type.
Note that underlying type of the newly constructed qualified type is shared with the old one.
t | the qualified type to clone. |
typedef_decl_sptr clone_typedef | ( | const typedef_decl_sptr & | t | ) |
Clone a typedef type.
Note that the underlying type of the newly constructed typedef is shared with the old one.
t | the typedef to clone. |
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.
If the class contains any anonymous data member, this function looks through it to collect the non-anonymous data members that it contains. The function also also looks through the base classes of the current type.
cou | the class or union type to consider. |
dms | output parameter. This is populated by the function with a map containing the non-anonymous data members that were collected. The key of the map is the name of the data member. This is set iff the function returns true. |
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.
If the class contains any anonymous data member, this function looks through it to collect the non-anonymous data members that it contains. The function also also looks through the base classes of the current type.
cou | the class or union type to consider. |
dms | output parameter. This is populated by the function with a map containing the non-anonymous data members that were collected. The key of the map is the name of the data member. This is set iff the function returns true. |
string components_to_type_name | ( | const list< string > & | comps | ) |
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 | ||
) |
method_decl_sptr copy_member_function | ( | const class_decl_sptr & | clazz, |
const method_decl_sptr & | f | ||
) |
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.
t | the class_or_union into which the method is to be copied. |
method | the method to copy into t . |
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.
t | the class_or_union into which the method is to be copied. |
method | the method to copy into t . |
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.
t | the union_decl into which the method is to be copied. |
method | the method to copy into t . |
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.
t | the union_decl into which the method is to be copied. |
method | the method to copy into t . |
const class_or_union_sptr data_member_has_anonymous_type | ( | const var_decl & | d | ) |
const class_or_union_sptr data_member_has_anonymous_type | ( | const var_decl * | d | ) |
const class_or_union_sptr data_member_has_anonymous_type | ( | const var_decl_sptr & | d | ) |
Emit a textual representation of an artifact to std error stream for debugging purposes.
This is useful to invoke from within a command line debugger like GDB to help make sense of a given ABI artifact.
artifact | the ABI artifact to emit the debugging representation for. |
artifact
. Emit a textual representation of an artifact to std error stream for debugging purposes.
This is useful to invoke from within a command line debugger like GDB to help make sense of a given ABI artifact.
artifact | the ABI artifact to emit the debugging representation for. |
artifact
. type_or_decl_base * debug | ( | const type_or_decl_base * | artifact | ) |
Emit a textual representation of an artifact to std error stream for debugging purposes.
This is useful to invoke from within a command line debugger like GDB to help make sense of a given ABI artifact.
artifact | the ABI artifact to emit the debugging representation for. |
artifact
. void debug_comp_stack | ( | const environment & | env | ) |
bool debug_equals | ( | const type_or_decl_base * | l, |
const type_or_decl_base * | r | ||
) |
Test if two ABI artifacts are equal.
This can be useful when used from the command line of a debugger like GDB.
l | the first ABI artifact to consider in the comparison. |
r | the second ABI artifact to consider in the comparison. |
l
equals r
. bool decl_name_changed | ( | const type_or_decl_base * | a1, |
const type_or_decl_base * | a2 | ||
) |
Test if two decls have different names.
Note that this function takes into account decls whose names are relevant from an ABI standpoint. For instance, function parameter names are not relevant in that context.
d1 | the first declaration to consider. |
d2 | the second declaration to consider. |
bool decl_name_changed | ( | const type_or_decl_base_sptr & | d1, |
const type_or_decl_base_sptr & | d2 | ||
) |
string demangle_cplus_mangled_name | ( | const string & | mangled_name | ) |
hash_t do_hash_value | ( | const shared_ptr< T > & | tod | ) |
Compute the hash value of an IR node and return it.
Note that if the IR node is a non-canonicalizeable type, no hash value is computed and an empty hash is returned. Also, if the IR node already has a hash value, then this function just returns it.
This is a sub-routine of the internal hashing functions defined in abg-hash.cc
tod | the IR node to compute the value for. |
Definition at line 388 of file abg-ir-priv.h.
hash_t do_hash_value | ( | const T & | tod | ) |
Compute the hash value of an IR node and return it.
Note that if the IR node is a non-canonicalizeable type, no hash value is computed and an empty hash is returned. Also, if the IR node already has a hash value, then this function just returns it.
This is a sub-routine of the internal hashing functions defined in abg-hash.cc
tod | the IR node to compute the value for. |
Definition at line 340 of file abg-ir-priv.h.
hash_t do_hash_value | ( | const T * | tod | ) |
Compute the hash value of an IR node and return it.
Note that if the IR node is a non-canonicalizeable type, no hash value is computed and an empty hash is returned. Also, if the IR node already has a hash value, then this function just returns it.
This is a sub-routine of the internal hashing functions defined in abg-hash.cc
tod | the IR node to compute the value for. |
Definition at line 367 of file abg-ir-priv.h.
bool elf_symbol_is_function | ( | elf_symbol::type | t | ) |
bool elf_symbol_is_variable | ( | elf_symbol::type | t | ) |
bool elf_symbols_alias | ( | const elf_symbol & | s1, |
const elf_symbol & | s2 | ||
) |
bool elf_symbols_alias | ( | const elf_symbol * | s1, |
const elf_symbol * | s2 | ||
) |
bool elf_symbols_alias | ( | const elf_symbol_sptr | s1, |
const elf_symbol_sptr | s2 | ||
) |
bool enum_has_non_name_change | ( | const enum_type_decl & | l, |
const enum_type_decl & | r, | ||
change_kind * | k | ||
) |
bool equals | ( | const array_type_def & | l, |
const array_type_def & | r, | ||
change_kind * | k | ||
) |
Compares two instances of array_type_def.
If the two intances are different, set a bitfield to give some insight about the kind of differences there are.
l | the first artifact of the comparison. |
r | the second artifact of the comparison. |
k | a pointer to a bitfield that gives information about the kind of changes there are between l and r . This one is set iff k is non-null and the function returns false. |
Please note that setting k to a non-null value does have a negative performance impact because even if l
and r
are not equal, the function keeps up the comparison in order to determine the different kinds of ways in which they are different.
l
equals r
, false otherwise. 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.
If the two intances are different, set a bitfield to give some insight about the kind of differences there are.
l | the first artifact of the comparison. |
r | the second artifact of the comparison. |
k | a pointer to a bitfield that gives information about the kind of changes there are between l and r . This one is set iff k is non-null and the function returns false. |
Please note that setting k to a non-null value does have a negative performance impact because even if l
and r
are not equal, the function keeps up the comparison in order to determine the different kinds of ways in which they are different.
l
equals r
, false otherwise. bool equals | ( | const class_decl & | l, |
const class_decl & | r, | ||
change_kind * | k | ||
) |
Compares two instances of class_decl.
If the two intances are different, set a bitfield to give some insight about the kind of differences there are.
l | the first artifact of the comparison. |
r | the second artifact of the comparison. |
k | a pointer to a bitfield that gives information about the kind of changes there are between l and r . This one is set iff k is non-null and the function returns false. |
Please note that setting k to a non-null value does have a negative performance impact because even if l
and r
are not equal, the function keeps up the comparison in order to determine the different kinds of ways in which they are different.
l
equals r
, false otherwise. 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.
If the two intances are different, set a bitfield to give some insight about the kind of differences there are.
l | the first artifact of the comparison. |
r | the second artifact of the comparison. |
k | a pointer to a bitfield that gives information about the kind of changes there are between l and r . This one is set iff k is non-null and the function returns false. |
Please note that setting k to a non-null value does have a negative performance impact because even if l
and r
are not equal, the function keeps up the comparison in order to determine the different kinds of ways in which they are different.
l
equals r
, false otherwise. bool equals | ( | const class_or_union & | l, |
const class_or_union & | r, | ||
change_kind * | k | ||
) |
Compares two instances of class_or_union.
If the two intances are different, set a bitfield to give some insight about the kind of differences there are.
l | the first artifact of the comparison. |
r | the second artifact of the comparison. |
k | a pointer to a bitfield that gives information about the kind of changes there are between l and r . This one is set iff it's non-null and if the function returns false. |
Please note that setting k to a non-null value does have a negative performance impact because even if l
and r
are not equal, the function keeps up the comparison in order to determine the different kinds of ways in which they are different.
l
equals r
, false otherwise. bool equals | ( | const decl_base & | l, |
const decl_base & | r, | ||
change_kind * | k | ||
) |
Compares two instances of decl_base.
If the two intances are different, set a bitfield to give some insight about the kind of differences there are.
l | the first artifact of the comparison. |
r | the second artifact of the comparison. |
k | a pointer to a bitfield that gives information about the kind of changes there are between l and r . This one is set iff it's non-null and if the function returns false. |
Please note that setting k to a non-null value does have a negative performance impact because even if l
and r
are not equal, the function keeps up the comparison in order to determine the different kinds of ways in which they are different.
l
equals r
, false otherwise. If both of the current decls have an anonymous scope then let's compare their name component by component by properly handling anonymous scopes. That's the slow path.
Otherwise, let's just compare their name, the obvious way. That's the fast path because in that case the names are interned_string and comparing them is much faster.
bool equals | ( | const enum_type_decl & | l, |
const enum_type_decl & | r, | ||
change_kind * | k | ||
) |
Compares two instances of enum_type_decl.
If the two intances are different, set a bitfield to give some insight about the kind of differences there are.
l | the first artifact of the comparison. |
r | the second artifact of the comparison. |
k | a pointer to a bitfield that gives information about the kind of changes there are between l and r . This one is set iff k is non-null and the function returns false. |
Please note that setting k to a non-null value does have a negative performance impact because even if l
and r
are not equal, the function keeps up the comparison in order to determine the different kinds of ways in which they are different.
l
equals r
, false otherwise. bool equals | ( | const function_decl & | l, |
const function_decl & | r, | ||
change_kind * | k | ||
) |
Compares two instances of function_decl.
If the two intances are different, set a bitfield to give some insight about the kind of differences there are.
l | the first artifact of the comparison. |
r | the second artifact of the comparison. |
k | a pointer to a bitfield that gives information about the kind of changes there are between l and r . This one is set iff k is non-null and the function returns false. |
Please note that setting k to a non-null value does have a negative performance impact because even if l
and r
are not equal, the function keeps up the comparison in order to determine the different kinds of ways in which they are different.
l
equals r
, false otherwise. bool equals | ( | const function_decl::parameter & | l, |
const function_decl::parameter & | r, | ||
change_kind * | k | ||
) |
Compares two instances of function_decl::parameter.
If the two intances are different, set a bitfield to give some insight about the kind of differences there are.
l | the first artifact of the comparison. |
r | the second artifact of the comparison. |
k | a pointer to a bitfield that gives information about the kind of changes there are between l and r . This one is set iff k is non-null and the function returns false. |
Please note that setting k to a non-null value does have a negative performance impact because even if l
and r
are not equal, the function keeps up the comparison in order to determine the different kinds of ways in which they are different.
l
equals r
, false otherwise. bool equals | ( | const function_type & | l, |
const function_type & | r, | ||
change_kind * | k | ||
) |
Compare two function types.
In case these function types are actually method types, this function avoids comparing two parameters (of the function types) if the types of the parameters are actually the types of the classes of the method types. This prevents infinite recursion during the comparison of two classes that are structurally identical.
This is a subroutine of the equality operator of function_type.
lhs | the first function type to consider |
rhs | the second function type to consider |
k | a pointer to a bitfield set by the function to give information about the kind of changes carried by lhs and rhs . It is set iff k is non-null and the function returns false. |
Please note that setting k to a non-null value does have a negative performance impact because even if l
and r
are not equal, the function keeps up the comparison in order to determine the different kinds of ways in which they are different.
bool equals | ( | const pointer_type_def & | l, |
const pointer_type_def & | r, | ||
change_kind * | k | ||
) |
Compares two instances of pointer_type_def.
If the two intances are different, set a bitfield to give some insight about the kind of differences there are.
l | the first artifact of the comparison. |
r | the second artifact of the comparison. |
k | a pointer to a bitfield that gives information about the kind of changes there are between l and r . This one is set iff k is non-null and the function returns false. |
Please note that setting k to a non-null value does have a negative performance impact because even if l
and r
are not equal, the function keeps up the comparison in order to determine the different kinds of ways in which they are different.
l
equals r
, false otherwise. 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.
If the two intances are different, set a bitfield to give some insight about the kind of differences there are.
l | the first artifact of the comparison. |
r | the second artifact of the comparison. |
k | a pointer to a bitfield that gives information about the kind of changes there are between l and r . This one is set iff k is non-null and the function returns false. |
Please note that setting k to a non-null value does have a negative performance impact because even if l
and r
are not equal, the function keeps up the comparison in order to determine the different kinds of ways in which they are different.
l
equals r
, false otherwise. bool equals | ( | const qualified_type_def & | l, |
const qualified_type_def & | r, | ||
change_kind * | k | ||
) |
Compares two instances of qualified_type_def.
If the two intances are different, set a bitfield to give some insight about the kind of differences there are.
l | the first artifact of the comparison. |
r | the second artifact of the comparison. |
k | a pointer to a bitfield that gives information about the kind of changes there are between l and r . This one is set iff k is non-null and the function returns false. |
Please note that setting k to a non-null value does have a negative performance impact because even if l
and r
are not equal, the function keeps up the comparison in order to determine the different kinds of ways in which they are different.
l
equals r
, false otherwise. bool equals | ( | const reference_type_def & | l, |
const reference_type_def & | r, | ||
change_kind * | k | ||
) |
Compares two instances of reference_type_def.
If the two intances are different, set a bitfield to give some insight about the kind of differences there are.
l | the first artifact of the comparison. |
r | the second artifact of the comparison. |
k | a pointer to a bitfield that gives information about the kind of changes there are between l and r . This one is set iff k is non-null and the function returns false. |
Please note that setting k to a non-null value does have a negative performance impact because even if l
and r
are not equal, the function keeps up the comparison in order to determine the different kinds of ways in which they are different.
l
equals r
, false otherwise. bool equals | ( | const scope_decl & | l, |
const scope_decl & | r, | ||
change_kind * | k | ||
) |
Compares two instances of scope_decl.
If the two intances are different, set a bitfield to give some insight about the kind of differences there are.
l | the first artifact of the comparison. |
r | the second artifact of the comparison. |
k | a pointer to a bitfield that gives information about the kind of changes there are between l and r . This one is set iff k is non-null and the function returns false. |
Please note that setting k to a non-null value does have a negative performance impact because even if l
and r
are not equal, the function keeps up the comparison in order to determine the different kinds of ways in which they are different.
l
equals r
, false otherwise. bool equals | ( | const scope_type_decl & | l, |
const scope_type_decl & | r, | ||
change_kind * | k | ||
) |
Compares two instances of scope_type_decl.
If the two intances are different, set a bitfield to give some insight about the kind of differences there are.
l | the first artifact of the comparison. |
r | the second artifact of the comparison. |
k | a pointer to a bitfield that gives information about the kind of changes there are between l and r . This one is set iff k is non-null and the function returns false. |
Please note that setting k to a non-null value does have a negative performance impact because even if l
and r
are not equal, the function keeps up the comparison in order to determine the different kinds of ways in which they are different.
l
equals r
, false otherwise. bool equals | ( | const type_base & | l, |
const type_base & | r, | ||
change_kind * | k | ||
) |
Compares two instances of type_base.
If the two intances are different, set a bitfield to give some insight about the kind of differences there are.
l | the first artifact of the comparison. |
r | the second artifact of the comparison. |
k | a pointer to a bitfield that gives information about the kind of changes there are between l and r . This one is set iff is non-null and if the function returns false. |
Please note that setting k to a non-null value does have a negative performance impact because even if l
and r
are not equal, the function keeps up the comparison in order to determine the different kinds of ways in which they are different.
l
equals r
, false otherwise. bool equals | ( | const type_decl & | l, |
const type_decl & | r, | ||
change_kind * | k | ||
) |
Compares two instances of type_decl.
If the two intances are different, set a bitfield to give some insight about the kind of differences there are.
l | the first artifact of the comparison. |
r | the second artifact of the comparison. |
k | a pointer to a bitfield that gives information about the kind of changes there are between l and r . This one is set iff k is non-null and the function returns false. |
Please note that setting k to a non-null value does have a negative performance impact because even if l
and r
are not equal, the function keeps up the comparison in order to determine the different kinds of ways in which they are different.
l
equals r
, false otherwise. bool equals | ( | const typedef_decl & | l, |
const typedef_decl & | r, | ||
change_kind * | k | ||
) |
Compares two instances of typedef_decl.
If the two intances are different, set a bitfield to give some insight about the kind of differences there are.
l | the first artifact of the comparison. |
r | the second artifact of the comparison. |
k | a pointer to a bitfield that gives information about the kind of changes there are between l and r . This one is set iff k is non-null and the function returns false. |
Please note that setting k to a non-null value does have a negative performance impact because even if l
and r
are not equal, the function keeps up the comparison in order to determine the different kinds of ways in which they are different.
l
equals r
, false otherwise. bool equals | ( | const union_decl & | l, |
const union_decl & | r, | ||
change_kind * | k | ||
) |
Compares two instances of union_decl.
If the two intances are different, set a bitfield to give some insight about the kind of differences there are.
l | the first artifact of the comparison. |
r | the second artifact of the comparison. |
k | a pointer to a bitfield that gives information about the kind of changes there are between l and r . This one is set iff k is non-null and the function returns false. |
Please note that setting k to a non-null value does have a negative performance impact because even if l
and r
are not equal, the function keeps up the comparison in order to determine the different kinds of ways in which they are different.
l
equals r
, false otherwise. bool equals | ( | const var_decl & | l, |
const var_decl & | r, | ||
change_kind * | k | ||
) |
Compares two instances of var_decl.
If the two intances are different, set a bitfield to give some insight about the kind of differences there are.
l | the first artifact of the comparison. |
r | the second artifact of the comparison. |
k | a pointer to a bitfield that gives information about the kind of changes there are between l and r . This one is set iff k is non-null and the function returns false. |
Please note that setting k to a non-null value does have a negative performance impact because even if l
and r
are not equal, the function keeps up the comparison in order to determine the different kinds of ways in which they are different.
l
equals r
, false otherwise. bool equals_modulo_cv_qualifier | ( | const array_type_def * | l, |
const array_type_def * | r | ||
) |
Test if two array types are equals modulo CV qualifiers.
l | the first array of the comparison. |
r | the second array of the comparison. |
l
equals r
or, if they are different, the difference between the too is just a matter of CV qualifiers. bool equals_modulo_cv_qualifier | ( | const array_type_def_sptr & | l, |
const array_type_def_sptr & | r | ||
) |
Test if two array types are equals modulo CV qualifiers.
l | the first array of the comparison. |
r | the second array of the comparison. |
l
equals r
or, if they are different, the difference between the too is just a matter of CV qualifiers. bool equals_modulo_cv_qualifier | ( | const pointer_type_def * | l, |
const pointer_type_def * | r | ||
) |
Test if two pointer types are equals modulo CV qualifiers.
l | the first pointer of the comparison. |
r | the second pointer of the comparison. |
l
equals r
or, if they are different, the difference between the too is just a matter of CV qualifiers. bool equals_modulo_cv_qualifier | ( | const pointer_type_def_sptr & | l, |
const pointer_type_def_sptr & | r | ||
) |
Test if two pointer types are equals modulo CV qualifiers.
l | the first pointer of the comparison. |
r | the second pointer of the comparison. |
l
equals r
or, if they are different, the difference between the too is just a matter of 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.
An anonymous data member has a type which is a class or union. This function looks for a data member inside the type of that anonymous data member.
anon_dm | the anonymous data member to consider. |
name | the name of the data member to look for. |
var_decl_sptr find_first_data_member_matching_regexp | ( | const class_or_union & | t, |
const regex::regex_t_sptr & | r | ||
) |
var_decl_sptr find_last_data_member_matching_regexp | ( | const class_or_union & | t, |
const regex::regex_t_sptr & | regex | ||
) |
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.
method | the method to fixup. |
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.
a_begin | the beginning of the sequence of functions to consider. |
a_end | the end of the sequence of functions. This points to one-passed-the-end of the actual sequence. |
b_begin | the beginning of the second sequence of functions to consider. |
b_end | the end of the second sequence of functions. |
o | the output stream where to emit the generated list of strings to. |
void fqn_to_components | ( | const string & | fqn, |
list< string > & | comps | ||
) |
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.
f | the first function_decl to consider for comparison. |
s | the second function_decl to consider for comparison. |
f
is lexicographically less than the pretty representation of s
. bool function_decls_alias | ( | const function_decl & | f1, |
const function_decl & | f2 | ||
) |
uint64_t get_absolute_data_member_offset | ( | const var_decl & | m | ) |
Get the absolute offset of a data member.
If the data member is part of an anonymous data member then this returns the absolute offset – relative to the beginning of the containing class of the anonymous data member.
m | the data member to consider. |
m
. uint64_t get_absolute_data_member_offset | ( | const var_decl_sptr & | m | ) |
Get the absolute offset of a data member.
If the data member is part of an anonymous data member then this returns the absolute offset – relative to the beginning of the containing class of the anonymous data member.
m | the data member to consider. |
m
. size_t get_canonical_type_index | ( | const type_base & | t | ) |
size_t get_canonical_type_index | ( | const type_base * | t | ) |
size_t get_canonical_type_index | ( | const type_base_sptr & | t | ) |
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.
The flat representation of a given enum_type_decl type is the actual definition of the type, for instance:
enum {E_0 =0, E_1 = 1}
enum_type | the enum type to consider. |
indent | the identation spaces to use in the representation. |
one_line | if true, then the flat representation stands on one line. Otherwise, it stands on multiple lines. |
qualified_names | use qualified names when applicable. Typically, if this is true, the name of the enum is going to be qualified. |
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.
The flat representation of a given class_or_union type is the actual definition of the type, for instance:
struct foo {int a; char b;}
cou | the instance of class_or_union to consider. |
indent | the identation spaces to use in the representation. |
one_line | if true, then the flat representation stands on one line. Otherwise, it stands on multiple lines. |
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.
The flat representation of a given class_or_union type is the actual definition of the type, for instance:
struct foo {int a; char b;}
cou | the instance of class_or_union to consider. |
indent | the identation spaces to use in the representation. |
one_line | if true, then the flat representation stands on one line. Otherwise, it stands on multiple lines. |
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.
The flat representation of a given class_or_union type is the actual definition of the type, for instance:
struct foo {int a; char b;}
cou | the instance of class_or_union to consider. |
indent | the identation spaces to use in the representation. |
one_line | if true, then the flat representation stands on one line. Otherwise, it stands on multiple lines. |
var_decl_sptr get_data_member | ( | class_or_union * | clazz, |
const char * | member_name | ||
) |
var_decl_sptr get_data_member | ( | type_base * | clazz, |
const char * | member_name | ||
) |
bool get_data_member_is_laid_out | ( | const var_decl & | m | ) |
bool get_data_member_is_laid_out | ( | const var_decl_sptr | m | ) |
uint64_t get_data_member_offset | ( | const decl_base_sptr | d | ) |
uint64_t get_data_member_offset | ( | const var_decl & | m | ) |
uint64_t get_data_member_offset | ( | const var_decl_sptr | m | ) |
string get_debug_representation | ( | const type_or_decl_base * | artifact | ) |
Get the textual representation of a type for debugging purposes.
If the type is a class/union, this shows the data members, virtual member functions, size, pointer value of its canonical type, etc. Otherwise, this just shows the name of the artifact as returned by type_or_decl_base:get_pretty_representation().
artifact | the artifact to show a debugging representation of. |
artifact
. 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.
The flat representation of a given enum_type_decl type is the actual definition of the type, for instance:
enum {E_0 =0, E_1 = 1}
enum_type | the enum type to consider. |
indent | the identation spaces to use in the representation. |
one_line | if true, then the flat representation stands on one line. Otherwise, it stands on multiple lines. |
qualified_names | use qualified names when applicable. Typically, if this is true, the name of the enum is going to be qualified. |
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.
The flat representation of a given enum_type_decl type is the actual definition of the type, for instance:
enum {E_0 =0, E_1 = 1}
enum_type | the enum type to consider. |
indent | the identation spaces to use in the representation. |
one_line | if true, then the flat representation stands on one line. Otherwise, it stands on multiple lines. |
qualified_names | use qualified names when applicable. Typically, if this is true, the name of the enum is going to be qualified. |
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.
The flat representation of a given enum_type_decl type is the actual definition of the type, for instance:
enum {E_0 =0, E_1 = 1}
enum_type | the enum type to consider. |
indent | the identation spaces to use in the representation. |
one_line | if true, then the flat representation stands on one line. Otherwise, it stands on multiple lines. |
qualified_names | use qualified names when applicable. Typically, if this is true, the name of the enum is going to be qualified. |
For a given type, return its exemplar type.
For a given type, its exemplar type is either its canonical type or the canonical type of the definition type of a given declaration-only type. If the neither of those two types exist, then the exemplar type is the given type itself.
type | the input to consider. |
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.
E.g:
struct S { union // <– for this anonymous data member, the function // returns a. { int a; charb; }; };
anon_dm
. If no data member was found then this function returns anon_dm
. interned_string get_function_id_or_pretty_representation | ( | const function_decl * | fn | ) |
const function_decl::parameter * get_function_parameter | ( | const decl_base * | fun, |
unsigned | parm_index | ||
) |
Get the function parameter designated by its index.
Note that the first function parameter has index 0.
fun | the function to consider. |
parm_index | the index of the function parameter to get. |
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.
fn_type | the function type to consider. |
internal | set to true if the call is intended for an internal use (for technical use inside the library itself), false otherwise. If you don't know what this is for, then set it to false. |
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.
fn_type | the function type to consider. |
internal | set to true if the call is intended for an internal use (for technical use inside the library itself), false otherwise. If you don't know what this is for, then set it to false. |
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.
fn_type | the function type to consider. |
internal | set to true if the call is intended for an internal use (for technical use inside the library itself), false otherwise. If you don't know what this is for, then set it to false. |
const global_scope * get_global_scope | ( | const decl_base & | decl | ) |
return the global scope as seen by a given declaration.
decl | the declaration to consider. |
const global_scope * get_global_scope | ( | const decl_base * | decl | ) |
return the global scope as seen by a given declaration.
decl | the declaration to consider. |
const global_scope * get_global_scope | ( | const shared_ptr< decl_base > | decl | ) |
Return the global scope as seen by a given declaration.
decl | the declaration to consider. |
var_decl_sptr get_last_data_member | ( | const class_or_union & | klass | ) |
var_decl_sptr get_last_data_member | ( | const class_or_union * | klass | ) |
var_decl_sptr get_last_data_member | ( | const class_or_union_sptr & | klass | ) |
location get_location | ( | const decl_base_sptr & | decl | ) |
location get_location | ( | const type_base_sptr & | type | ) |
enum access_specifier get_member_access_specifier | ( | const decl_base & | d | ) |
enum access_specifier get_member_access_specifier | ( | const decl_base_sptr & | d | ) |
bool get_member_function_is_const | ( | const function_decl & | f | ) |
bool get_member_function_is_const | ( | const function_decl_sptr & | f | ) |
bool get_member_function_is_ctor | ( | const function_decl & | f | ) |
bool get_member_function_is_ctor | ( | const function_decl_sptr & | f | ) |
bool get_member_function_is_dtor | ( | const function_decl & | f | ) |
bool get_member_function_is_dtor | ( | const function_decl_sptr & | f | ) |
bool get_member_function_is_virtual | ( | const function_decl & | f | ) |
bool get_member_function_is_virtual | ( | const function_decl * | mem_fn | ) |
bool get_member_function_is_virtual | ( | const function_decl_sptr & | mem_fn | ) |
ssize_t get_member_function_vtable_offset | ( | const function_decl & | f | ) |
ssize_t get_member_function_vtable_offset | ( | const function_decl_sptr & | f | ) |
bool get_member_is_static | ( | const decl_base & | d | ) |
Gets a flag saying if a class member is static or not.
d | the declaration for the class member to consider. Note that this must be a class member otherwise the function aborts the current process. |
d
is static, false otherwise. bool get_member_is_static | ( | const decl_base * | d | ) |
Gets a flag saying if a class member is static or not.
d | the declaration for the class member to consider. Note that this must be a class member otherwise the function aborts the current process. |
d
is static, false otherwise. bool get_member_is_static | ( | const decl_base_sptr & | d | ) |
Gets a flag saying if a class member is static or not.
d | the declaration for the class member to consider. Note that this must be a class member otherwise the function aborts the current process. |
d
is static, false otherwise. 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.
fn_type | the function type to consider. |
internal | set to true if the call is intended for an internal use (for technical use inside the library itself), false otherwise. If you don't know what this is for, then set it to false. |
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.
fn_type | the function type to consider. |
internal | set to true if the call is intended for an internal use (for technical use inside the library itself), false otherwise. If you don't know what this is for, then set it to false. |
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.
fn_type | the function type to consider. |
internal | set to true if the call is intended for an internal use (for technical use inside the library itself), false otherwise. If you don't know what this is for, then set it to false. |
string get_name | ( | const type_or_decl_base * | tod, |
bool | qualified | ||
) |
string get_name | ( | const type_or_decl_base_sptr & | tod, |
bool | qualified | ||
) |
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.
pointed_to_type | the pointed-to-type to consider. |
qualified | this is true if the resulting name should be of a pointer to a *fully-qualified* pointed-to-type. |
internal | true if the name is for libabigail-internal purposes. |
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.
underlying_type | the underlying type to consider. |
quals | the CV qualifiers of the name. |
qualified | true if we should consider the fully qualified name of underlying_type . |
internal | true if the result is to be used for libabigail-internal purposes. |
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.
pointed_to_type | the pointed-to-type to consider. |
qualified | this is true if the resulting name should be of a reference to a *fully-qualified* pointed-to-type. |
internal | true if the name is for libabigail-internal purposes. |
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.
klass | the class or union to consider. |
the | data member to consider. |
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.
klass | the class or union to consider. |
the | data member to consider. |
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.
If there is no data member after after the one given to this function (maybe because the given one is the last data member of the class type) then the function return false.
klass | the class to consider. |
dm | the data member before the one we want to retrieve. |
offset | out parameter. This parameter is set by the function to the offset of the data member that comes right after the data member dm , iff the function returns true. |
dm
was found. 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.
If there is no data member after after the one given to this function (maybe because the given one is the last data member of the class type) then the function return false.
klass | the class to consider. |
dm | the data member before the one we want to retrieve. |
offset | out parameter. This parameter is set by the function to the offset of the data member that comes right after the data member dm , iff the function returns true. |
dm
was found. const interned_string & get_node_name | ( | class_decl_sptr | node | ) |
Gets the name of a class_decl node.
node | the decl_base node to get the name from. |
const interned_string & get_node_name | ( | type_base_sptr | node | ) |
const interned_string & get_node_name | ( | var_decl_sptr | node | ) |
string get_pretty_representation | ( | const decl_base * | d, |
bool | internal | ||
) |
Get a copy of the pretty representation of a decl.
d | the decl to consider. |
internal | set to true if the call is intended for an internal use (for technical use inside the library itself), false otherwise. If you don't know what this is for, then set it to false. |
string get_pretty_representation | ( | const decl_base_sptr & | d, |
bool | internal | ||
) |
Get a copy of the pretty representation of a decl.
d | the decl to consider. |
internal | set to true if the call is intended for an internal use (for technical use inside the library itself), false otherwise. If you don't know what this is for, then set it to false. |
string get_pretty_representation | ( | const function_type & | fn_type, |
bool | internal | ||
) |
Get the pretty representation of a function type.
fn_type | the function type to consider. |
internal | set to true if the call is intended for an internal use (for technical use inside the library itself), false otherwise. If you don't know what this is for, then set it to false. |
string get_pretty_representation | ( | const function_type * | fn_type, |
bool | internal | ||
) |
Get the pretty representation of a function type.
fn_type | the function type to consider. |
internal | set to true if the call is intended for an internal use (for technical use inside the library itself), false otherwise. If you don't know what this is for, then set it to false. |
string get_pretty_representation | ( | const function_type_sptr & | fn_type, |
bool | internal | ||
) |
Get the pretty representation of a function type.
fn_type | the function type to consider. |
internal | set to true if the call is intended for an internal use (for technical use inside the library itself), false otherwise. If you don't know what this is for, then set it to false. |
string get_pretty_representation | ( | const method_type & | method, |
bool | internal | ||
) |
Get the pretty representation of a method type.
method | the method type to consider. |
internal | set to true if the call is intended for an internal use (for technical use inside the library itself), false otherwise. If you don't know what this is for, then set it to false. |
string get_pretty_representation | ( | const method_type * | method, |
bool | internal | ||
) |
Get the pretty representation of a method type.
method | the method type to consider. |
internal | set to true if the call is intended for an internal use (for technical use inside the library itself), false otherwise. If you don't know what this is for, then set it to false. |
string get_pretty_representation | ( | const method_type_sptr | method, |
bool | internal | ||
) |
Get the pretty representation of a method type.
method | the method type to consider. |
internal | set to true if the call is intended for an internal use (for technical use inside the library itself), false otherwise. If you don't know what this is for, then set it to false. |
string get_pretty_representation | ( | const type_base * | t, |
bool | internal | ||
) |
Get a copy of the pretty representation of a type.
d | the type to consider. |
internal | set to true if the call is intended for an internal use (for technical use inside the library itself), false otherwise. If you don't know what this is for, then set it to false. |
string get_pretty_representation | ( | const type_base_sptr & | t, |
bool | internal | ||
) |
Get a copy of the pretty representation of a type.
d | the type to consider. |
internal | set to true if the call is intended for an internal use (for technical use inside the library itself), false otherwise. If you don't know what this is for, then set it to false. |
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.
param tod the ABI artifact to consider.
internal | set to true if the call is intended for an internal use (for technical use inside the library itself), false otherwise. If you don't know what this is for, then set it to false. |
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.
param tod the ABI artifact to consider.
internal | set to true if the call is intended for an internal use (for technical use inside the library itself), false otherwise. If you don't know what this is for, then set it to false. |
string get_string_representation_of_cv_quals | ( | const qualified_type_def::CV | cv_quals | ) |
const scope_decl * get_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.
Note that scope
must come before decl
in topological order.
decl | the decl for which to find a scope. |
scope | the scope under which the resulting scope must be. |
const scope_decl * get_top_most_scope_under | ( | const decl_base_sptr | decl, |
const scope_decl * | scope | ||
) |
const scope_decl * get_top_most_scope_under | ( | const decl_base_sptr | decl, |
const scope_decl_sptr | scope | ||
) |
translation_unit * get_translation_unit | ( | const type_or_decl_base & | t | ) |
translation_unit * get_translation_unit | ( | const type_or_decl_base * | decl | ) |
translation_unit * get_translation_unit | ( | const type_or_decl_base_sptr & | decl | ) |
decl_base_sptr get_type_declaration | ( | const type_base_sptr | t | ) |
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.
t | the type to consider. |
qualified | if true then return the qualified name of the type. |
internal | set to true if the call is intended for an internal use (for technical use inside the library itself), false otherwise. If you don't know what this is for, then set it to false. |
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.
t | the type to consider. |
qualified | if true then return the qualified name of the type. |
internal | set to true if the call is intended for an internal use (for technical use inside the library itself), false otherwise. If you don't know what this is for, then set it to false. |
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.
t | the type to consider. |
qualified | if true then return the qualified name of the type. |
internal | set to true if the call is intended for an internal use (for technical use inside the library itself), false otherwise. If you don't know what this is for, then set it to false. |
scope_decl * get_type_scope | ( | const type_base_sptr & | t | ) |
scope_decl * get_type_scope | ( | type_base * | t | ) |
uint64_t get_var_size_in_bits | ( | const var_decl_sptr & | v | ) |
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.
An array with one element is a way to mimic the flexible data member idiom that was later standardized in C99.
To learn more about the flexible data member idiom, please consider reading : https://en.wikipedia.org/wiki/Flexible_array_member.
The various ways of representing that idiom pre-standardization are presented in this article: https://developers.redhat.com/articles/2022/09/29/benefits-limitations-flexible-array-members#
klass | the class to consider. |
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.
An array with one element is a way to mimic the flexible data member idiom that was later standardized in C99.
To learn more about the flexible data member idiom, please consider reading : https://en.wikipedia.org/wiki/Flexible_array_member.
The various ways of representing that idiom pre-standardization are presented in this article: https://developers.redhat.com/articles/2022/09/29/benefits-limitations-flexible-array-members#
klass | the class to consider. |
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.
An array with one element is a way to mimic the flexible data member idiom that was later standardized in C99.
To learn more about the flexible data member idiom, please consider reading : https://en.wikipedia.org/wiki/Flexible_array_member.
The various ways of representing that idiom pre-standardization are presented in this article: https://developers.redhat.com/articles/2022/09/29/benefits-limitations-flexible-array-members#
klass | the class to consider. |
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.
The flexible data member idiom is a well known C idiom: https://en.wikipedia.org/wiki/Flexible_array_member.
klass | the class to consider. |
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.
The flexible data member idiom is a well known C idiom: https://en.wikipedia.org/wiki/Flexible_array_member.
klass | the class to consider. |
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.
The flexible data member idiom is a well known C idiom: https://en.wikipedia.org/wiki/Flexible_array_member.
klass | the class to consider. |
bool has_scope | ( | const decl_base & | d | ) |
bool has_scope | ( | const decl_base_sptr | d | ) |
void hash_and_canonicalize_types | ( | IteratorType | begin, |
IteratorType | end, | ||
deref_lambda | deref, | ||
bool | do_log = false , |
||
bool | show_stats = false |
||
) |
Hash and canonicalize a sequence of types.
Note that this function first sorts the types, then hashes them and then canonicalizes them.
Operations must be done in that order to get predictable results.
begin | an iterator pointing to the first element of the sequence of types to hash and canonicalize. |
begin | an iterator pointing past-the-end of the sequence of types to hash and canonicalize. |
deref | this is a lambda that is used to dereference the types contained in the sequence referenced by iterators begin and end . |
Definition at line 1523 of file abg-ir-priv.h.
size_t hash_type | ( | const type_base * | t | ) |
Hash an ABI artifact that is a type.
This function intends to provides the fastest possible hashing for types while being completely correct.
Note that if the type artifact has a canonical type, the hash value is going to be the pointer value of the canonical type. Otherwise, this function computes a hash value for the type by recursively walking the type members. This last code path is possibly *very* slow and should only be used when only handful of types are going to be hashed.
t | the type or decl to hash. |
size_t hash_type_or_decl | ( | const type_or_decl_base * | tod | ) |
Hash an ABI artifact that is either a type or a decl.
This function intends to provides the fastest possible hashing for types and decls, while being completely correct.
Note that if the artifact is a type and if it has a canonical type, the hash value is going to be the pointer value of the canonical type. Otherwise, this function computes a hash value for the type by recursively walking the type members. This last code path is possibly *very* slow and should only be used when only handful of types are going to be hashed.
If the artifact is a decl, then a combination of the hash of its type and the hash of the other properties of the decl is computed.
tod | the type or decl to hash. |
size_t hash_type_or_decl | ( | const type_or_decl_base_sptr & | tod | ) |
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 | the declaration to insert into the scope. |
before | an iterator pointing to the child IR node before which to insert the declaration. |
scope | the scope into which to insert the declaration. |
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.
decl | the declaration to insert into the scope. |
before | an iterator pointing to the child IR node before which to insert the declaration. |
scope | the scope into which to insert the declaration. |
bool integral_type_has_harmless_name_change | ( | const decl_base_sptr & | f, |
const decl_base_sptr & | s | ||
) |
Test if a diff node carries a change whereby two integral types have different names in a harmless way.
Basically, if the integral type name change is accompanied by a size change then the change is considered harmful. If there are modifiers change, the change is considered harmful.
bool integral_type_has_harmless_name_change | ( | const type_base_sptr & | f, |
const type_base_sptr & | s | ||
) |
Test if a diff node carries a change whereby two integral types have different names in a harmless way.
Basically, if the integral type name change is accompanied by a size change then the change is considered harmful. If there are modifiers change, the change is considered harmful.
bool is_ada_language | ( | translation_unit::language | l | ) |
bool is_anonymous_data_member | ( | const decl_base & | d | ) |
var_decl_sptr is_anonymous_data_member | ( | const decl_base_sptr & | d | ) |
const var_decl * is_anonymous_data_member | ( | const type_or_decl_base * | d | ) |
var_decl_sptr is_anonymous_data_member | ( | const type_or_decl_base_sptr & | d | ) |
bool is_anonymous_data_member | ( | const var_decl & | d | ) |
var_decl_sptr is_anonymous_data_member | ( | const var_decl_sptr & | d | ) |
bool is_anonymous_or_typedef_named | ( | const decl_base & | d | ) |
bool is_anonymous_type | ( | const type_base * | t | ) |
Test whether a declaration is a type.
d | the declaration to test for. |
Note that this function considers that an anonymous class that is named by a typedef is not anonymous anymore. This is the C idiom:
typedef struct {int member;} s_type;
The typedef s_type becomes the name of the originally anonymous struct.
t | the type to consider. |
t
is anonymous. bool is_anonymous_type | ( | const type_base_sptr & | t | ) |
qualified_type_def_sptr is_array_of_qualified_element | ( | const array_type_def_sptr & | array | ) |
array_type_def_sptr is_array_of_qualified_element | ( | const type_base_sptr & | type | ) |
array_type_def * is_array_type | ( | const type_or_decl_base * | type, |
bool | look_through_qualifiers | ||
) |
Test if a type is an array_type_def.
type | the type to consider. |
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.
type | the type to consider. |
type
is an array_type_def. class_or_union * is_at_class_scope | ( | const decl_base & | decl | ) |
class_or_union * is_at_class_scope | ( | const decl_base * | decl | ) |
class_or_union * is_at_class_scope | ( | const decl_base_sptr | decl | ) |
bool is_at_global_scope | ( | const decl_base & | decl | ) |
bool is_at_global_scope | ( | const decl_base * | decl | ) |
bool is_at_global_scope | ( | const decl_base_sptr | decl | ) |
bool is_at_template_scope | ( | const shared_ptr< decl_base > | decl | ) |
Tests whether a given decl is at template scope.
Note that only template parameters , types that are compositions, and template patterns (function or class) can be at template scope.
decl | the decl to consider. |
bool is_c_language | ( | translation_unit::language | l | ) |
class_decl::base_spec * is_class_base_spec | ( | const type_or_decl_base * | tod | ) |
Test if an ABI artifact is a class base specifier.
tod | the ABI artifact to consider. |
tod
iff it's 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.
tod | the ABI artifact to consider. |
tod
iff it's a class base specifier. shared_ptr< class_or_union > is_class_or_union_type | ( | const shared_ptr< type_or_decl_base > & | t | ) |
Test if a type is a class_or_union.
t | the type to consider. |
is
a class_or_union, or nil otherwise. class_or_union * is_class_or_union_type | ( | const type_or_decl_base * | t | ) |
Test if a type is a class_or_union.
t | the type to consider. |
is
a class_or_union, or nil otherwise. bool is_class_type | ( | const type_or_decl_base & | t | ) |
class_decl * is_class_type | ( | const type_or_decl_base * | t | ) |
Test whether a type is a class.
@parm t the type to consider.
t
is a class_decl or null otherwise. class_decl_sptr is_class_type | ( | const type_or_decl_base_sptr & | d | ) |
Test whether a type is a class.
@parm t the type to consider.
t
is a class_decl or null otherwise. 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.
l | the left-hand-side operand of the current comparison. |
r | the right-hand-side operand of the current comparison. |
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).
l | the left-hand-side operand of the current comparison. |
r | the right-hand-side operand of the current 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.
@parm t the type to consider.
t
is a class_decl or null otherwise. 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.
@parm t the type to consider.
t
is a class_decl or null otherwise. enum_type_decl_sptr is_compatible_with_enum_type | ( | const decl_base_sptr & | t | ) |
enum_type_decl_sptr is_compatible_with_enum_type | ( | const type_base_sptr & | t | ) |
bool is_const_qualified_type | ( | const qualified_type_def_sptr & | t | ) |
bool is_const_qualified_type | ( | const type_base_sptr & | t | ) |
corpus_group_sptr is_corpus_group | ( | const corpus_sptr & | corpus | ) |
Test if a corpus is a corpus_group.
corpus | the corpus to consider. |
corpus
is a corpus group, or nil. Definition at line 2277 of file abg-corpus.cc.
bool is_cplus_plus_language | ( | translation_unit::language | l | ) |
var_decl_sptr is_data_member | ( | const decl_base_sptr & | d | ) |
var_decl * is_data_member | ( | const type_or_decl_base * | d | ) |
var_decl_sptr is_data_member | ( | const type_or_decl_base_sptr & | d | ) |
bool is_data_member | ( | const var_decl & | v | ) |
bool is_data_member | ( | const var_decl * | v | ) |
bool is_data_member | ( | const var_decl_sptr | d | ) |
bool is_data_member_of_anonymous_class_or_union | ( | const var_decl & | d | ) |
bool is_data_member_of_anonymous_class_or_union | ( | const var_decl * | d | ) |
bool is_data_member_of_anonymous_class_or_union | ( | const var_decl_sptr & | d | ) |
decl_base * is_decl | ( | const type_or_decl_base * | d | ) |
decl_base_sptr is_decl | ( | const type_or_decl_base_sptr & | d | ) |
decl_base * is_decl_slow | ( | const type_or_decl_base * | t | ) |
decl_base_sptr is_decl_slow | ( | const type_or_decl_base_sptr & | t | ) |
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.
t | the type to considier. |
look_through_decl_only | if true, then look through the decl-only class to see if it actually has a class definition in the same ABI corpus. |
t
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.
t | the type to considier. |
look_through_decl_only | if true, then look through the decl-only class to see if it actually has a class definition in the same ABI corpus. |
t
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.
t | the type to considier. |
look_through_decl_only | if true, then look through the decl-only class to see if it actually has a class definition in the same ABI corpus. |
t
is a declaration-only class. const enum_type_decl * is_enum_type | ( | const type_or_decl_base * | d | ) |
Test if a decl is an enum_type_decl.
d | the decl to test for. |
d
is an enum, nil otherwise. enum_type_decl_sptr is_enum_type | ( | const type_or_decl_base_sptr & | d | ) |
Test if a decl is an enum_type_decl.
d | the decl to test for. |
d
is an enum, nil otherwise. bool is_enumerator_present_in_enum | ( | const enum_type_decl::enumerator & | enr, |
const enum_type_decl & | enom | ||
) |
bool is_function_decl | ( | const type_or_decl_base & | d | ) |
Test whether a declaration is a function_decl.
d | the declaration to test for. |
d
is a function_decl. function_decl * is_function_decl | ( | const type_or_decl_base * | d | ) |
Test whether a declaration is a function_decl.
d | the declaration to test for. |
d
is a function_decl. Otherwise, a nil shared pointer. function_decl_sptr is_function_decl | ( | const type_or_decl_base_sptr & | d | ) |
Test whether a declaration is a function_decl.
d | the declaration to test for. |
d
is a function_decl. Otherwise, a nil shared pointer. function_decl::parameter * is_function_parameter | ( | const type_or_decl_base * | tod | ) |
Test whether a declaration is a function_decl.
d | the declaration to test for. |
d
is a function_decl. Otherwise, a nil shared pointer. function_decl::parameter_sptr is_function_parameter | ( | const type_or_decl_base_sptr | tod | ) |
Test whether an ABI artifact is a function_decl.
tod | the declaration to test for. |
d
is a function_decl. Otherwise, a nil shared pointer. bool is_function_template_pattern | ( | const shared_ptr< decl_base > | decl | ) |
const function_type * is_function_type | ( | const type_or_decl_base * | t | ) |
Test whether a type is a function_type.
t | the type to test. |
t
is a function_type, null otherwise. function_type_sptr is_function_type | ( | const type_or_decl_base_sptr & | t | ) |
Test whether a type is a function_type.
t | the type to test. |
t
is a function_type, null otherwise. function_type * is_function_type | ( | type_or_decl_base * | t | ) |
Test whether a type is a function_type.
t | the type to test. |
t
is a function_type, null otherwise. bool is_global_scope | ( | const scope_decl & | scope | ) |
const global_scope * is_global_scope | ( | const scope_decl * | scope | ) |
Tests whether if a given scope is the global scope.
scope | the scope to consider. |
scope
or 0 if scope
is not a global scope. bool is_global_scope | ( | const shared_ptr< scope_decl > | scope | ) |
type_decl * is_integral_type | ( | const type_or_decl_base * | t | ) |
type_decl_sptr is_integral_type | ( | const type_or_decl_base_sptr & | t | ) |
bool is_java_language | ( | translation_unit::language | l | ) |
bool is_member_decl | ( | const decl_base & | d | ) |
bool is_member_decl | ( | const decl_base * | d | ) |
bool is_member_decl | ( | const decl_base_sptr | d | ) |
bool is_member_function | ( | const function_decl & | f | ) |
Test whether a function_decl is a member function.
f | the function_decl to test. |
f
is a member function, false otherwise. bool is_member_function | ( | const function_decl * | f | ) |
Test whether a function_decl is a member function.
f | the function_decl to test. |
f
is a member function, false otherwise. bool is_member_function | ( | const function_decl_sptr & | f | ) |
Test whether a function_decl is a member function.
f | the function_decl to test. |
f
is a member function, false otherwise. bool is_member_type | ( | const type_base_sptr & | t | ) |
method_decl * is_method_decl | ( | const type_or_decl_base & | d | ) |
Test if a function_decl is actually a method_decl.
d | the function_decl to consider. |
d
if inherits a method_decl type. method_decl * is_method_decl | ( | const type_or_decl_base * | d | ) |
Test if a function_decl is actually a method_decl.
d | the function_decl to consider. |
d
if inherits a method_decl type. method_decl_sptr is_method_decl | ( | const type_or_decl_base_sptr & | d | ) |
Test if a function_decl is actually a method_decl.
d | the function_decl to consider. |
d
if inherits a method_decl type. const method_type * is_method_type | ( | const type_or_decl_base * | t | ) |
Test whether a type is a method_type.
t | the type to test. |
t
is a method_type, null otherwise. method_type_sptr is_method_type | ( | const type_or_decl_base_sptr & | t | ) |
Test whether a type is a method_type.
t | the type to test. |
t
is a method_type, null otherwise. method_type * is_method_type | ( | type_or_decl_base * | t | ) |
Test whether a type is a method_type.
t | the type to test. |
t
is a method_type, null otherwise. namespace_decl * is_namespace | ( | const decl_base * | d | ) |
namespace_decl_sptr is_namespace | ( | const decl_base_sptr & | d | ) |
bool is_non_canonicalized_type | ( | const type_base * | t | ) |
Test if a given type is allowed to be non canonicalized.
This is a subroutine of hash_as_canonical_type_or_constant.
For now, the only types allowed to be non canonicalized in the system are (typedefs & pointers to) decl-only class/union, the void type and variadic parameter types.
t
is a one of the only types allowed to be non-canonicalized in the system. bool is_non_canonicalized_type | ( | const type_base_sptr & | t | ) |
Test if a given type is allowed to be non canonicalized.
This is a subroutine of hash_as_canonical_type_or_constant.
For now, the only types allowed to be non canonicalized in the system are decl-only class/union and the void type.
t
is a one of the only types allowed to be non-canonicalized in the system. bool is_npaf_type | ( | const type_base_sptr & | t | ) |
pointer_type_def_sptr is_pointer_to_array_type | ( | const type_base_sptr & | t | ) |
pointer_type_def_sptr is_pointer_to_function_type | ( | const type_base_sptr & | t | ) |
Test if a type is a pointer to function type.
t | the type to consider. |
t
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.
t | the type to consider. |
t
is a neither-a-pointer-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.
t | the type to consider. |
t
is a pointer to pointer to member type. const pointer_type_def * is_pointer_type | ( | const type_or_decl_base * | t, |
bool | look_through_qualifiers | ||
) |
Test whether a type is a pointer_type_def.
t | the type to test. |
look_through_decl_only | if this is true, then look through qualified types to see if the underlying type is a pointer_type_def. |
t
is a pointer_type_def, null otherwise. 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.
t | the type to test. |
look_through_decl_only | if this is true, then look through qualified types to see if the underlying type is a pointer_type_def. |
t
is a pointer_type_def, null otherwise. bool is_ptr_ref_or_qual_type | ( | const type_base * | t | ) |
const ptr_to_mbr_type * is_ptr_to_mbr_type | ( | const type_or_decl_base * | t, |
bool | look_through_qualifiers | ||
) |
Test whether a type is a ptr_to_mbr_type.
t | the type to test. |
t
is a ptr_to_mbr_type type, null otherwise. 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.
t | the type to test. |
look_through_decl_only | if this is true, then look through qualified types to see if the underlying type is a ptr_to_mbr_type.. |
t
is a ptr_to_mbr_type type, null otherwise. qualified_type_def * is_qualified_type | ( | const type_or_decl_base * | t | ) |
Test whether a type is a reference_type_def.
t | the type to test. |
t
is a reference_type_def, null otherwise. qualified_type_def_sptr is_qualified_type | ( | const type_or_decl_base_sptr & | t | ) |
Test whether a type is a qualified_type_def.
t | the type to test. |
t
is a qualified_type_def, null otherwise. type_decl * is_real_type | ( | const type_or_decl_base * | t | ) |
type_decl_sptr is_real_type | ( | const type_or_decl_base_sptr & | t | ) |
const reference_type_def * is_reference_type | ( | const type_or_decl_base * | t, |
bool | look_through_qualifiers | ||
) |
Test whether a type is a reference_type_def.
t | the type to test. |
look_through_decl_only | if this is true, then look through qualified types to see if the underlying type is a reference_type_def. |
t
is a reference_type_def, null otherwise. 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.
t | the type to test. |
look_through_decl_only | if this is true, then look through qualified types to see if the underlying type is a reference_type_def. |
t
is a reference_type_def, null otherwise. reference_type_def * is_reference_type | ( | type_or_decl_base * | t, |
bool | look_through_qualifiers | ||
) |
Test whether a type is a reference_type_def.
t | the type to test. |
look_through_decl_only | if this is true, then look through qualified types to see if the underlying type is a reference_type_def. |
t
is a reference_type_def, null otherwise. const scope_decl * is_scope_decl | ( | const decl_base * | d | ) |
Test if a declaration is a scope_decl.
d | the declaration to take in account. |
d
, if d is a scope_decl. scope_decl_sptr is_scope_decl | ( | const decl_base_sptr & | d | ) |
Test if a declaration is a scope_decl.
d | the declaration to take in account. |
d
, if d is a scope_decl. array_type_def::subrange_type * is_subrange_type | ( | const type_or_decl_base * | type | ) |
Test if a type is an array_type_def::subrange_type.
type | the type to consider. |
type
is a type of, or nil if it's not of that 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.
type | the type to consider. |
type
is a type of, or nil if it's not of that type. bool is_template_decl | ( | const decl_base_sptr & | decl | ) |
bool is_template_parameter | ( | const shared_ptr< decl_base > | decl | ) |
bool is_template_parm_composition_type | ( | const shared_ptr< decl_base > | decl | ) |
bool is_type | ( | const type_or_decl_base & | tod | ) |
type_base * is_type | ( | const type_or_decl_base * | t | ) |
type_base_sptr is_type | ( | const type_or_decl_base_sptr & | tod | ) |
const type_decl * is_type_decl | ( | const type_or_decl_base * | t | ) |
type_decl_sptr is_type_decl | ( | const type_or_decl_base_sptr & | t | ) |
const typedef_decl * is_typedef | ( | const type_base * | t | ) |
const typedef_decl * is_typedef | ( | const type_or_decl_base * | t | ) |
typedef_decl_sptr is_typedef | ( | const type_or_decl_base_sptr | t | ) |
typedef_decl * is_typedef | ( | type_base * | t | ) |
array_type_def_sptr is_typedef_of_array | ( | const type_base_sptr & | t | ) |
Test if a type is a typedef of an array.
Note that the function looks through qualified and typedefs types of the underlying type of the current typedef. In other words, if we are looking at a typedef of a CV-qualified array, or at a typedef of a CV-qualified typedef of an array, this function will still return TRUE.
t | the type to consider. |
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.
Note that if the type is directly a class or union type, the function returns true as well.
t | the type to consider. |
t
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.
Note that if the type is directly a class or union type, the function returns true as well.
t | the type to consider. |
t
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 | ) |
union_decl_sptr is_union_type | ( | const shared_ptr< type_or_decl_base > & | t | ) |
Test if a type is a union_decl.
t | the type to consider. |
is
a union_decl, or nil otherwise. bool is_union_type | ( | const type_or_decl_base & | t | ) |
Test if a type is a union_decl.
t | the type to consider. |
t
is a union_decl. union_decl * is_union_type | ( | const type_or_decl_base * | t | ) |
Test if a type is a union_decl.
t | the type to consider. |
is
a union_decl, or nil otherwise. bool is_unique_type | ( | const type_base * | t | ) |
bool is_unique_type | ( | const type_base_sptr & | t | ) |
bool is_user_defined_type | ( | const type_base * | t | ) |
bool is_user_defined_type | ( | const type_base_sptr & | t | ) |
var_decl * is_var_decl | ( | const type_or_decl_base * | tod | ) |
var_decl_sptr is_var_decl | ( | const type_or_decl_base_sptr & | decl | ) |
const type_base_sptr is_void_pointer_type | ( | const type_base_sptr & | t | ) |
Test if a type is equivalent to a pointer to void type.
Note that this looks trough typedefs or CV qualifiers to look for the void pointer.
type | the type to consider. |
is
eqivalent to a void pointer or NULL if it's not. Test if a type is equivalent to a pointer to void type.
Note that this looks trough typedefs or CV qualifiers to look for the void pointer.
type | the type to consider. |
is
eqivalent to a void pointer or NULL if it's not. void keep_type_alive | ( | type_base_sptr | t | ) |
decl_base_sptr look_through_decl_only | ( | const decl_base & | d | ) |
decl_base_sptr look_through_decl_only | ( | const decl_base_sptr & | d | ) |
class_or_union * look_through_decl_only_class | ( | class_or_union * | the_class | ) |
class_or_union_sptr look_through_decl_only_class | ( | class_or_union_sptr | klass | ) |
class_or_union_sptr look_through_decl_only_class | ( | const class_or_union & | the_class | ) |
enum_type_decl_sptr look_through_decl_only_enum | ( | const enum_type_decl & | the_enum | ) |
enum_type_decl_sptr look_through_decl_only_enum | ( | enum_type_decl_sptr | enom | ) |
type_base_sptr look_through_decl_only_type | ( | const type_base_sptr & | t | ) |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
qualified_name | the qualified name of the array type to look for. |
corp | the corpus to look into. |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
t | the type which has the same qualified name as the type we are looking for. |
corp | the corpus to look into. |
array_type_def_sptr lookup_array_type | ( | const interned_string & | type_name, |
const translation_unit & | tu | ||
) |
Lookup an array type from a translation unit.
This is done by looking the type up in the type map that is maintained in the translation unit. So this is as fast as possible.
type_name | the name of the array type to look for. |
tu | the translation unit to look into. |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
qualified_name | the qualified name of the basic type to look for. |
corp | the corpus to look into. |
type_decl_sptr lookup_basic_type | ( | const interned_string & | type_name, |
const translation_unit & | tu | ||
) |
Lookup a basic type from a translation unit.
This is done by looking the type up in the type map that is maintained in the translation unit. So this is as fast as possible.
type_name | the name of the basic type to look for. |
tu | the translation unit to look into. |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
qualified_name | the qualified name of the basic type to look for. |
corp | the corpus to look into. |
type_decl_sptr lookup_basic_type | ( | const string & | type_name, |
const translation_unit & | tu | ||
) |
Lookup a basic type from a translation unit.
This is done by looking the type up in the type map that is maintained in the translation unit. So this is as fast as possible.
type_name | the name of the basic type to look for. |
tu | the translation unit to look into. |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
t | the type which has the same qualified name as the type we are looking for. |
corp | the ABI corpus to look into for the type. |
type_decl_sptr lookup_basic_type_per_location | ( | const interned_string & | loc, |
const corpus & | corp | ||
) |
type_decl_sptr lookup_basic_type_per_location | ( | const string & | loc, |
const corpus & | corp | ||
) |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
qualified_name | the name of the type to find. |
corp | the corpus to look into. |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
t | the class decl type which has the same qualified name as the type we are looking for. |
corp | the corpus to look into. |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
qualified_name | the qualified name of the type to look for. |
corp | the corpus to look into. |
class_decl_sptr lookup_class_type | ( | const interned_string & | type_name, |
const translation_unit & | tu | ||
) |
Lookup a class type from a translation unit.
This is done by looking the type up in the type map that is maintained in the translation unit. So this is as fast as possible.
type_name | the name of the class type to look for. |
tu | the translation unit to look into. |
class_decl_sptr lookup_class_type | ( | const string & | fqn, |
const translation_unit & | tu | ||
) |
Lookup a class type from a translation unit.
This is done by looking the type up in the type map that is maintained in the translation unit. So this is as fast as possible.
fqn | the fully qualified name of the class type node to look up. |
tu | the translation unit to perform lookup from. |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
qualified_name | the qualified name of the type to look for. |
corp | the corpus to look into. |
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.
loc | the location to consider. |
corp | the corpus to consider. |
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.
loc | the location to consider. |
corp | the corpus to consider. |
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.
This is much slower than using the lookup_class_type() function because it walks all the scopes of the translation unit in sequence and lookup the types to find one that has a given name.
fqn | the components of the fully qualified name of the class type node to look up. |
tu | the translation unit to perform lookup from. |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
qualified_name | the qualified name of the type to look for. |
corp | the corpus to look into. |
const type_base_wptrs_type * lookup_class_types | ( | const interned_string & | qualified_name, |
const corpus & | corp | ||
) |
const type_base_wptrs_type * lookup_class_types | ( | const string & | qualified_name, |
const corpus & | corp | ||
) |
Look for a data member of a given class, struct or union type and return it.
The data member is designated by its name.
type | the class, struct or union type to consider. |
dm_name | the name of the data member to lookup. |
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.
The data member is designated by its name.
type | the class, struct or union type to consider. |
dm | the data member to lookup. |
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.
qualified_name | the qualified name of the type to look for. |
corp | the corpus to look into. |
result | the vector of decl-only class types named qualified_name . This is populated iff the function returns true. |
result
was populated with the decl-only classes named qualified_name
. 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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
t | the enum type which has the same qualified name as the type we are looking for. |
corp | the corpus to look into. |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
qualified_name | the qualified name of the enum type to look for. |
corp | the corpus to look into. |
enum_type_decl_sptr lookup_enum_type | ( | const interned_string & | type_name, |
const translation_unit & | tu | ||
) |
Lookup an enum type from a translation unit.
This is done by looking the type up in the type map that is maintained in the translation unit. So this is as fast as possible.
type_name | the name of the enum type to look for. |
tu | the translation unit to look into. |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
qualified_name | the qualified name of the enum type to look for. |
corp | the corpus to look into. |
enum_type_decl_sptr lookup_enum_type | ( | const string & | type_name, |
const translation_unit & | tu | ||
) |
Lookup an enum type from a translation unit.
This is done by looking the type up in the type map that is maintained in the translation unit. So this is as fast as possible.
type_name | the name of the enum type to look for. |
tu | the translation unit to look into. |
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.
loc | the location to consider. |
corp | the corpus to look the type from. |
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.
loc | the location to consider. |
corp | the corpus to look the type from. |
const type_base_wptrs_type * lookup_enum_types | ( | const interned_string & | qualified_name, |
const corpus & | corp | ||
) |
const type_base_wptrs_type * lookup_enum_types | ( | const string & | qualified_name, |
const corpus & | corp | ||
) |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
t | the function type which has the same qualified name as the function type we are looking for. |
corp | the corpus to look into. |
function_type_sptr lookup_function_type | ( | const function_type & | t, |
const translation_unit & | tu | ||
) |
Lookup a function type from a translation unit.
This walks all the function types held by the translation unit and compare their sub-type *names*. If the names match then return the function type found in the translation unit.
t | the function type to look for. |
tu | the translation unit to look into. |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
t | the function type which has the same qualified name as the function type we are looking for. |
corp | the corpus to look into. |
function_type_sptr lookup_function_type | ( | const function_type_sptr & | t, |
const translation_unit & | tu | ||
) |
Lookup a function type from a translation unit.
This is done by looking the type up in the type map that is maintained in the translation unit. So this is as fast as possible.
t | the function type to look for. |
tu | the translation unit to look into. |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
qualified_name | the qualified name of the function type to look for. |
corp | the corpus to look into. |
function_type_sptr lookup_function_type | ( | const interned_string & | type_name, |
const translation_unit & | tu | ||
) |
Lookup a function type from a translation unit.
This is done by looking the type up in the type map that is maintained in the translation unit. So this is as fast as possible.
type_name | the name of the type to lookup. |
tu | the translation unit to look into. |
function_type_sptr lookup_or_synthesize_fn_type | ( | const function_type_sptr & | fn_t, |
const corpus & | corpus | ||
) |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
qualified_name | the qualified name of the pointer type to look for. |
corp | the corpus to look into. |
pointer_type_def_sptr lookup_pointer_type | ( | const interned_string & | type_name, |
const translation_unit & | tu | ||
) |
Lookup a pointer type from a translation unit.
This is done by looking the type up in the type map that is maintained in the translation unit. So this is as fast as possible.
type_name | the name of the pointer type to look for. |
tu | the translation unit to look into. |
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.
t | the pointer type which has the same qualified name as the type we are looking for. |
corp | the corpus to look into. |
pointer_type_def_sptr lookup_pointer_type | ( | const string & | type_name, |
const translation_unit & | tu | ||
) |
Lookup a pointer type from a translation unit.
This is done by looking the type up in the type map that is maintained in the translation unit. So this is as fast as possible.
type_name | the name of the pointer type to look for. |
tu | the translation unit to look into. |
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.
This is done by looking the type up in the type map that is maintained in the translation unit. So this is as fast as possible.
pointed_to_type | the pointed-to-type of the pointer to look for. |
tu | the translation unit to look into. |
qualified_type_def_sptr lookup_qualified_type | ( | const interned_string & | qualified_name, |
const corpus & | corp | ||
) |
qualified_type_def_sptr lookup_qualified_type | ( | const interned_string & | type_name, |
const translation_unit & | tu | ||
) |
Lookup a qualified type from a translation unit.
This is done by looking the type up in the type map that is maintained in the translation unit. So this is as fast as possible.
type_name | the name of the qualified type to look for. |
tu | the translation unit to look into. |
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.
t | the type which has the same qualified name as the qualified type we are looking for. |
corp | the corpus to look into. |
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.
This is done by looking the type up in the type map that is maintained in the translation unit. So this is as fast as possible.
underlying_type | the underying type of the qualified type to look up. |
quals | the CV-qualifiers of the qualified type to look for. |
tu | the translation unit to look into. |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
qualified_name | the qualified name of the reference type to look for. |
corp | the corpus to look into. |
reference_type_def_sptr lookup_reference_type | ( | const interned_string & | type_name, |
const translation_unit & | tu | ||
) |
Lookup a reference type from a translation unit.
This is done by looking the type up in the type map that is maintained in the translation unit. So this is as fast as possible.
type_name | the name of the reference type to look for. |
tu | the translation unit to look into. |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
t | the reference type which has the same qualified name as the reference type we are looking for. |
corp | the corpus to look into. |
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.
This is done by looking the type up in the type map that is maintained in the translation unit. So this is as fast as possible.
pointed_to_type | the pointed-to-type of the reference to look up. |
tu | the translation unit to look into. |
const type_base_sptr lookup_type | ( | const interned_string & | fqn, |
const translation_unit & | tu | ||
) |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
qualified_name | the qualified name of the function type to look for. |
corp | the corpus to look into. |
type_base_sptr lookup_type | ( | const string & | fqn, |
const translation_unit & | tu | ||
) |
Look into a given corpus to find a type.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
qualified_name | the qualified name of the function type to look for. |
corp | the corpus to look into. |
type_base_sptr lookup_type | ( | const type_base_sptr & | t, |
const corpus & | corp | ||
) |
Look into a given corpus to find a type.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
qualified_name | the qualified name of the function type to look for. |
corp | the corpus to look into. |
const type_base_sptr lookup_type | ( | const type_base_sptr | type, |
const translation_unit & | tu | ||
) |
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.
type_name | the name of the type to look for. |
@parm tu_path the path of the translation unit to consider.
corp | the corpus to consider. |
const type_base_sptr lookup_type_in_scope | ( | const list< string > & | comps, |
const scope_decl_sptr & | scope | ||
) |
lookup a type in a scope.
This is really slow as it walks the member types of the scope in sequence to find the type with a given name.
If possible, users should prefer looking up types from the enclosing translation unit or even ABI corpus because both the translation unit and the corpus have a map of type, indexed by their name. Looking up a type from those maps is thus much faster.
comps | the components of the fully qualified name of the type to lookup. |
skope | the scope to look into. |
const type_base_sptr lookup_type_in_scope | ( | const string & | fqn, |
const scope_decl_sptr & | skope | ||
) |
Lookup a type in a scope.
This is really slow as it walks the member types of the scope in sequence to find the type with a given name.
If possible, users should prefer looking up types from the enclosing translation unit or even ABI corpus because both the translation unit and the corpus have a map of type, indexed by their name. Looking up a type from those maps is thus much faster.
fqn | the fully qualified name of the type to lookup. |
skope | the scope to look into. |
type_base_sptr lookup_type_per_location | ( | const interned_string & | loc, |
const corpus & | corp | ||
) |
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.
This is much slower than using the lookup_type() function.
fqn | the components of the fully qualified name of the node to look up. |
tu | the translation unit to perform lookup from. |
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.
This is really slow as it walks the member types of the scopes in sequence to find the type with a given name.
If possible, users should prefer looking up types from the translation unit or even ABI corpus in a more direct way, by using the lookup_type() functins.
This is because both the translation unit and the corpus have a map of types, indexed by their name. Looking up a type from those maps is thus much faster.
fqn | the components of the fully qualified name of the node to look up. |
tu | the translation unit to perform lookup from. |
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.
param qn the fully qualified name of the type to lookup.
abi_corpus | the ABI corpus which to look the type up in. |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
qualified_name | the qualified name of the typedef type to look for. |
corp | the corpus to look into. |
typedef_decl_sptr lookup_typedef_type | ( | const interned_string & | type_name, |
const translation_unit & | tu | ||
) |
Lookup a typedef type from a translation unit.
This is done by looking the type up in the type map that is maintained in the translation unit. So this is as fast as possible.
type_name | the name of the typedef type to look for. |
tu | the translation unit to look into. |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
t | the typedef type which has the same qualified name as the typedef type we are looking for. |
corp | the corpus to look into. |
typedef_decl_sptr lookup_typedef_type | ( | const string & | type_name, |
const translation_unit & | tu | ||
) |
Lookup a typedef type from a translation unit.
This is done by looking the type up in the type map that is maintained in the translation unit. So this is as fast as possible.
type_name | the name of the typedef type to look for. |
tu | the translation unit to look into. |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
t | the typedef type which has the same qualified name as the typedef type we are looking for. |
corp | the corpus to look into. |
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.
loc | the location to consider. |
corp | the corpus to consider. |
typedef_decl_sptr lookup_typedef_type_per_location | ( | const string & | loc, |
const corpus & | corp | ||
) |
Lookup a typedef_decl from a corpus, by its location.
loc | the location to consider. |
corp | the corpus to consider. |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
qualified_name | the qualified name of the type to look for. |
corp | the corpus to look into. |
union_decl_sptr lookup_union_type | ( | const interned_string & | type_name, |
const translation_unit & | tu | ||
) |
Lookup a union type from a translation unit.
This is done by looking the type up in the type map that is maintained in the translation unit. So this is as fast as possible.
type_name | the name of the union type to look for. |
tu | the translation unit to look into. |
union_decl_sptr lookup_union_type | ( | const string & | fqn, |
const translation_unit & | tu | ||
) |
Lookup a union type from a translation unit.
This is done by looking the type up in the type map that is maintained in the translation unit. So this is as fast as possible.
fqn | the fully qualified name of the type to lookup. |
tu | the translation unit to look into. |
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.
If the per-corpus type map is non-empty (because the corpus allows the One Definition Rule) then the type islooked up in that per-corpus type map. Otherwise, the type is looked-up in each translation unit.
qualified_name | the qualified name of the type to look for. |
corp | the corpus to look into. |
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.
loc | the location of the union type to look for. |
corp | the corpus to look it from. |
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.
loc | the location of the union type to look for. |
corp | the corpus to look it from. |
const type_base_wptrs_type * lookup_union_types | ( | const interned_string & | qualified_name, |
const corpus & | corp | ||
) |
const type_base_wptrs_type * lookup_union_types | ( | const string & | qualified_name, |
const corpus & | corp | ||
) |
const decl_base_sptr lookup_var_decl_in_scope | ( | const std::list< string > & | comps, |
const scope_decl_sptr & | skope | ||
) |
const decl_base_sptr lookup_var_decl_in_scope | ( | const string & | fqn, |
const scope_decl_sptr & | skope | ||
) |
void mark_types_as_being_compared | ( | const class_decl & | l, |
const class_decl & | r | ||
) |
Mark a pair of class_decl types as being compared.
This is helpful to later detect recursive cycles in the comparison stack.
l | the left-hand-side operand of the comparison. |
@parm r the right-hand-side operand of the comparison.
void mark_types_as_being_compared | ( | T & | l, |
T & | r | ||
) |
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.
For instance, access specifiers are part of the "is-a-member-relation" of a decl.
This comparison however doesn't take decl names into account. So typedefs for instance are decls that we want to compare with this function.
This function is a sub-routine of the more general 'equals' overload for instances of decl_base.
l | the left-hand side operand of the comparison. |
r | the right-hand side operand of the comparison. |
l
compare equals, as a member decl, to r
. T * maybe_get_canonical_type | ( | T * | t | ) |
Get the canonical type of a given type T* as a T*.
Note that normally, canonical types are returned as type_base* (un-typed form, kind of). This function returns the canonical type as a T*, just like the T* it is looking at.
t | the type to consider. |
t
or t
itself if it doesn't have any canonical type. 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.
The per-translation unit type map is updated if no type with this name was already existing in that map.
If no type with this name did already exist in the per-corpus type map, then that per-corpus type map is updated. Otherwise, that type is erased from that per-corpus map.
subrange_type | the type to consider. |
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.
The per-translation unit type map is updated if no type with this name was already existing in that map.
If no type with this name did already exist in the per-corpus type map, then that per-corpus type map is updated. Otherwise, that type is erased from that per-corpus map.
array_type | the type to consider. |
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.
The per-translation unit type map is updated if no type with this name was already existing in that map.
If no type with this name did already exist in the per-corpus type map, then that per-corpus type map is updated. Otherwise, that type is erased from that per-corpus map.
class_type | the class type to consider. |
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.
The per-translation unit type map is updated if no type with this name was already existing in that map.
If no type with this name did already exist in the per-corpus type map, then that per-corpus type map is updated. Otherwise, that type is erased from that per-corpus map.
decl | the declaration of the type to consider. |
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.
The per-translation unit type map is updated if no type with this name was already existing in that map.
If no type with this name did already exist in the per-corpus type map, then that per-corpus type map is updated. Otherwise, that type is erased from that per-corpus map.
enum_type | the type to consider. |
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.
The per-translation unit type map is updated if no type with this name was already existing in that map.
If no type with this name did already exist in the per-corpus type map, then that per-corpus type map is updated. Otherwise, that type is erased from that per-corpus map.
scope | the scope of the function type. |
fn_type | the type to consider. |
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.
The per-translation unit type map is updated if no type with this name was already existing in that map.
If no type with this name did already exist in the per-corpus type map, then that per-corpus type map is updated. Otherwise, that type is erased from that per-corpus map.
pointer_type | the type to consider. |
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.
The per-translation unit type map is updated if no type with this name was already existing in that map.
If no type with this name did already exist in the per-corpus type map, then that per-corpus type map is updated. Otherwise, that type is erased from that per-corpus map.
ptr_to_mbr_type | the type to consider. |
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.
The per-translation unit type map is updated if no type with this name was already existing in that map.
If no type with this name did already exist in the per-corpus type map, then that per-corpus type map is updated. Otherwise, that type is erased from that per-corpus map.
qualified_type | the type to consider. |
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.
The per-translation unit type map is updated if no type with this name was already existing in that map.
If no type with this name did already exist in the per-corpus type map, then that per-corpus type map is updated. Otherwise, that type is erased from that per-corpus map.
reference_type | the type to consider. |
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.
type | the type we are considering. |
types_map | the map to update. It's a map that assciates a fully qualified name of a type to the type itself. |
use_type_name_as_key | if true, use the name of the type as the key to look it up later. If false, then use the location of the type as a key to look it up later. |
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.
The per-translation unit type map is updated if no type with this name was already existing in that map.
If no type with this name did already exist in the per-corpus type map, then that per-corpus type map is updated. Otherwise, that type is erased from that per-corpus map.
type | the type to consider. |
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.
The per-translation unit type map is updated if no type with this name was already existing in that map.
If no type with this name did already exist in the per-corpus type map, then that per-corpus type map is updated. Otherwise, that type is erased from that per-corpus map.
basic_type | the basic type to consider. |
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.
The per-translation unit type map is updated if no type with this name was already existing in that map.
If no type with this name did already exist in the per-corpus type map, then that per-corpus type map is updated. Otherwise, that type is erased from that per-corpus map.
typedef_type | the type to consider. |
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.
The per-translation unit type map is updated if no type with this name was already existing in that map.
If no type with this name did already exist in the per-corpus type map, then that per-corpus type map is updated. Otherwise, that type is erased from that per-corpus map.
union_type | the union type to consider. |
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:
maybe_update_types_lookup_map<T>(scope_decl*, const shared_ptr<T>&, istring_type_base_wptrs_map_type&)
class_type | the type to consider. |
types_map | the type map to update. |
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:
maybe_update_types_lookup_map<T>(scope_decl*, const shared_ptr<T>&, istring_type_base_wptrs_map_type&)
scope | the scope of the type to consider. |
class_type | the type to consider. |
types_map | the type map to update. |
bool member_function_has_vtable_offset | ( | const function_decl & | f | ) |
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.
To date, it applies to c++, java and ada.
artifact | the ABI artifact to consider. |
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.
This compares the pointed-to objects.
l | the first instance to consider. |
r | the second instance to consider. |
l
is different from r
. 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.
l | the shared_ptr of class_decl on left-hand-side of the equality. |
r | the shared_ptr of class_decl on right-hand-side of the equality. |
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.
l | the left-hand-side operand of the operator |
r | the right-hand-side operand of the operator. |
l
is different from r
. bool operator!= | ( | const decl_base_sptr & | l, |
const decl_base_sptr & | r | ||
) |
Inequality operator of shared_ptr of decl_base.
This is a deep equality operator, that is, it compares the pointed-to objects, rather than just the pointers.
l | the left-hand-side operand. |
r | the right-hand-side operand. |
l
is different from r
. bool operator!= | ( | const elf_symbol_sptr & | lhs, |
const elf_symbol_sptr & | rhs | ||
) |
Inequality operator for smart pointers to elf_symbol.
lhs | the first elf symbol to consider. |
rhs | the second elf symbol to consider. |
lhs
is different from rhs
. bool operator!= | ( | const enum_type_decl_sptr & | l, |
const enum_type_decl_sptr & | r | ||
) |
Inequality operator for enum_type_decl_sptr.
l | the first operand to compare. |
r | the second operand to compare. |
l
equals r
. bool operator!= | ( | const function_decl::parameter_sptr & | l, |
const function_decl::parameter_sptr & | r | ||
) |
Non-member inequality operator for function_decl::parameter.
l | the left-hand side of the equality operator |
r | the right-hand side of the equality operator |
l
and r
different. bool operator!= | ( | const function_decl_sptr & | l, |
const function_decl_sptr & | r | ||
) |
bool operator!= | ( | const member_class_template_sptr & | l, |
const member_class_template_sptr & | r | ||
) |
Inequality operator for the member_class_template type.
l | the first argument of the operator. |
r | the second argument of the operator. |
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.
l | the first instance to consider. |
r | the second instance to consider. |
l
equals r
. bool operator!= | ( | const method_decl_sptr & | l, |
const method_decl_sptr & | r | ||
) |
Inequality operator for method_decl_sptr.
This is a deep equality operator, as it compares the method_decl that is pointed-to by the smart pointer.
l | the left-hand side argument of the equality operator. |
r | the righ-hand side argument of the equality operator. |
l
differs from r
. 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.
l | the shared_ptr of pointer_type_def on left-hand-side of the equality. |
r | the shared_ptr of pointer_type_def on right-hand-side of the equality. |
bool operator!= | ( | const qualified_type_def_sptr & | l, |
const qualified_type_def_sptr & | r | ||
) |
Non-member inequality operator for qualified_type_def.
l | the left-hand side of the equality operator |
r | the right-hand side of the equality operator |
l
and r
equals. 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.
l | the shared_ptr of reference_type_def on left-hand-side of the equality. |
r | the shared_ptr of reference_type_def on right-hand-side of the equality. |
bool operator!= | ( | const scope_decl_sptr & | l, |
const scope_decl_sptr & | r | ||
) |
Inequality operator for scope_decl_sptr.
l | the left hand side operand of the equality operator. |
@pram r the right hand side operand of the equalify operator.
l
equals r
. bool operator!= | ( | const translation_unit_sptr & | l, |
const translation_unit_sptr & | r | ||
) |
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..
l | the shared_ptr of type_base on left-hand-side of the equality. |
r | the shared_ptr of type_base on right-hand-side of the equality. |
bool operator!= | ( | const type_decl_sptr & | l, |
const type_decl_sptr & | r | ||
) |
Inequality operator for type_decl_sptr.
l | the first operand to compare. |
r | the second operand to compare. |
l
is different from r
. bool operator!= | ( | const type_or_decl_base_sptr & | l, |
const type_or_decl_base_sptr & | r | ||
) |
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.
l | the left-hand-side operand of the operator |
r | the right-hand-side operand of the operator. |
l
is different from r
. change_kind operator& | ( | change_kind | l, |
change_kind | r | ||
) |
corpus::origin operator& | ( | corpus::origin | l, |
corpus::origin | r | ||
) |
Bitwise & operator for the corpus::origin type.
l | the left-hand side operand of the & operation. |
r | the right-hand side operand of the & operation. |
Definition at line 1802 of file abg-corpus.cc.
qualified_type_def::CV operator& | ( | qualified_type_def::CV | lhs, |
qualified_type_def::CV | rhs | ||
) |
real_type::modifiers_type operator& | ( | real_type::modifiers_type | l, |
real_type::modifiers_type | r | ||
) |
Bitwise AND operator for real_type::modifiers_type.
l | the left-hand side operand. |
r | the right-hand side operand. |
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_kind & operator&= | ( | change_kind & | l, |
change_kind | r | ||
) |
corpus::origin operator&= | ( | corpus::origin & | l, |
corpus::origin | r | ||
) |
Bitwise &= operator for the corpus::origin type.
l | the left-hand side operand of the &= operation. |
r | the right-hand side operand of the &= operation. |
Definition at line 1816 of file abg-corpus.cc.
qualified_type_def::CV & operator&= | ( | qualified_type_def::CV & | l, |
qualified_type_def::CV | r | ||
) |
real_type::modifiers_type & operator&= | ( | real_type::modifiers_type & | l, |
real_type::modifiers_type | r | ||
) |
Bitwise &= operator for real_type::modifiers_type.
l | the left-hand side operand. |
r | the right-hand side operand. |
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 "A&=" operator for the type_or_decl_base::type_or_decl_kind bitmap type.
std::ostream & operator<< | ( | std::ostream & | o, |
access_specifier | a | ||
) |
std::ostream & operator<< | ( | std::ostream & | o, |
decl_base::binding | b | ||
) |
Streaming operator for decl_base::binding.
o | the output stream to serialize the visibility to. |
b | the binding to serialize. |
std::ostream & operator<< | ( | std::ostream & | o, |
decl_base::visibility | v | ||
) |
Streaming operator for the decl_base::visibility.
o | the output stream to serialize the visibility to. |
v | the visibility to serialize. |
std::ostream & operator<< | ( | std::ostream & | o, |
elf_symbol::binding | b | ||
) |
std::ostream & operator<< | ( | std::ostream & | o, |
elf_symbol::type | t | ||
) |
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.
o | the output stream to serialize the symbole type to. |
v | the symbol visibility to serialize. |
std::ostream & operator<< | ( | std::ostream & | o, |
qualified_type_def::CV | cv | ||
) |
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.
This compares the pointed-to objects.
l | the first instance to consider. |
r | the second instance to consider. |
l
equals r
. 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.
l | the shared_ptr of class_decl on left-hand-side of the equality. |
r | the shared_ptr of class_decl on right-hand-side of the equality. |
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.
l | the left-hand-side operand of the operator |
r | the right-hand-side operand of the operator. |
l
equals r
. 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.
l | the shared_ptr of decl_base on left-hand-side of the equality. |
r | the shared_ptr of decl_base on right-hand-side of the equality. |
bool operator== | ( | const elf_symbol_sptr & | lhs, |
const elf_symbol_sptr & | rhs | ||
) |
Equality operator for smart pointers to elf_symbol.
lhs | the first elf symbol to consider. |
rhs | the second elf symbol to consider. |
lhs
equals rhs
. bool operator== | ( | const enum_type_decl_sptr & | l, |
const enum_type_decl_sptr & | r | ||
) |
Equality operator for enum_type_decl_sptr.
l | the first operand to compare. |
r | the second operand to compare. |
l
equals r
. bool operator== | ( | const function_decl::parameter_sptr & | l, |
const function_decl::parameter_sptr & | r | ||
) |
Non-member equality operator for function_decl::parameter.
l | the left-hand side of the equality operator |
r | the right-hand side of the equality operator |
l
and r
equals. bool operator== | ( | const function_decl_sptr & | l, |
const function_decl_sptr & | r | ||
) |
A deep comparison operator for a shared pointer to function_decl.
This function compares to shared pointers to function_decl by looking at the pointed-to instances of function_dec comparing them too. If the two pointed-to objects are equal then this function returns true.
l | the left-hand side argument of the equality operator. |
r | the right-hand side argument of the equality operator. |
l
equals r
. bool operator== | ( | const member_class_template_sptr & | l, |
const member_class_template_sptr & | r | ||
) |
Comparison operator for the member_class_template type.
l | the first argument of the operator. |
r | the second argument of the operator. |
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.
l | the first instance to consider. |
r | the second instance to consider. |
l
equals r
. bool operator== | ( | const method_decl_sptr & | l, |
const method_decl_sptr & | r | ||
) |
Equality operator for method_decl_sptr.
This is a deep equality operator, as it compares the method_decl that is pointed-to by the smart pointer.
l | the left-hand side argument of the equality operator. |
r | the righ-hand side argument of the equality operator. |
l
equals r
. 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.
l | the shared_ptr of pointer_type_def on left-hand-side of the equality. |
r | the shared_ptr of pointer_type_def on right-hand-side of the equality. |
bool operator== | ( | const qualified_type_def_sptr & | l, |
const qualified_type_def_sptr & | r | ||
) |
Non-member equality operator for qualified_type_def.
l | the left-hand side of the equality operator |
r | the right-hand side of the equality operator |
l
and r
equals. 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.
l | the shared_ptr of reference_type_def on left-hand-side of the equality. |
r | the shared_ptr of reference_type_def on right-hand-side of the equality. |
bool operator== | ( | const scope_decl_sptr & | l, |
const scope_decl_sptr & | r | ||
) |
Equality operator for scope_decl_sptr.
l | the left hand side operand of the equality operator. |
@pram r the right hand side operand of the equalify operator.
l
equals r
. bool operator== | ( | const translation_unit_sptr & | l, |
const translation_unit_sptr & | r | ||
) |
A deep comparison operator for pointers to translation units.
l | the first translation unit to consider for the comparison. |
r | the second translation unit to consider for the comparison. |
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.
l | the shared_ptr of type_base on left-hand-side of the equality. |
r | the shared_ptr of type_base on right-hand-side of the equality. |
bool operator== | ( | const type_decl_sptr & | l, |
const type_decl_sptr & | r | ||
) |
Equality operator for type_decl_sptr.
l | the first operand to compare. |
r | the second operand to compare. |
l
equals r
. bool operator== | ( | const type_or_decl_base & | lr, |
const type_or_decl_base & | rr | ||
) |
bool operator== | ( | const type_or_decl_base_sptr & | l, |
const type_or_decl_base_sptr & | r | ||
) |
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.
l | the left-hand-side operand of the operator |
r | the right-hand-side operand of the operator. |
l
equals r
. change_kind operator| | ( | change_kind | l, |
change_kind | r | ||
) |
corpus::origin operator| | ( | corpus::origin | l, |
corpus::origin | r | ||
) |
Bitwise | operator for the corpus::origin type.
l | the left-hand side operand of the | operation. |
r | the right-hand side operand of the | operation. |
Definition at line 1774 of file abg-corpus.cc.
qualified_type_def::CV operator| | ( | qualified_type_def::CV | lhs, |
qualified_type_def::CV | rhs | ||
) |
real_type::modifiers_type operator| | ( | real_type::modifiers_type | l, |
real_type::modifiers_type | r | ||
) |
Bitwise OR operator for real_type::modifiers_type.
l | the left-hand side operand. |
r | the right-hand side operand. |
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_kind & operator|= | ( | change_kind & | l, |
change_kind | r | ||
) |
corpus::origin operator|= | ( | corpus::origin & | l, |
corpus::origin | r | ||
) |
Bitwise |= operator for the corpus::origin type.
l | the left-hand side operand for the |= operation. |
r | the right-hand side operand for the |= operation. |
Definition at line 1788 of file abg-corpus.cc.
qualified_type_def::CV & operator|= | ( | qualified_type_def::CV & | l, |
qualified_type_def::CV | r | ||
) |
real_type::modifiers_type & operator|= | ( | real_type::modifiers_type & | l, |
real_type::modifiers_type | r | ||
) |
Bitwise |= operator for real_type::modifiers_type.
l | the left-hand side operand. |
r | the right-hand side operand. |
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 "|=" operator for the type_or_decl_base::type_or_decl_kind bitmap type.
qualified_type_def::CV operator~ | ( | qualified_type_def::CV | q | ) |
real_type::modifiers_type operator~ | ( | real_type::modifiers_type | l | ) |
Bitwise one's complement operator for real_type::modifiers_type.
l | the left-hand side operand. |
r | the right-hand side operand. |
bool parse_real_type | ( | const string & | str, |
real_type & | type | ||
) |
hash_t peek_hash_value | ( | const type_or_decl_base & | artefact | ) |
Get the hash value associated to an IR node.
Unlike type_or_decl_base::hash_value(), if the IR has no associated hash value, an empty hash value is returned.
artefact | the IR node to consider. |
artefact
. Return the leaf element type of an array.
If the element type is itself an array, then recursively return the element type of that array itself.
type | the array type to consider. If this is not an array type, this type is returned by the function. |
type
, or, if it's not an array type, then just return
. const type_base_sptr peel_array_type | ( | const type_base_sptr & | type | ) |
Return the leaf element type of an array.
If the element type is itself an array, then recursively return the element type of that array itself.
type | the array type to consider. If this is not an array type, this type is returned by the function. |
type
, or, if it's not an array type, then just return
. type_base_sptr peel_const_qualified_type | ( | const qualified_type_def_sptr & | q | ) |
Return the leaf underlying or pointed-to type node of a, pointer_type_def, reference_type_def or qualified_type_def type node.
type | the type to peel. |
peel_qualified_type | if true, also peel qualified types. |
type
. Return the leaf pointed-to type node of a pointer_type_def node.
If the pointed-to type of a pointer_type_def node is itself a pointer_type_def node, then recursively look at the pointed-to type nodes to get the first one that is not a a pointer_type_def node. This is what a leaf pointed-to type node means.
Otherwise, if the pointed-to type node of pointer_type_def is *NOT* a pointer_type_def node, then just return the pointed-to type node.
And if the type node considered is not a pointer_type_def node, then just return it.
type
. type_base_sptr peel_pointer_type | ( | const type_base_sptr & | type | ) |
Return the leaf pointed-to type node of a pointer_type_def node.
If the pointed-to type of a pointer_type_def node is itself a pointer_type_def node, then recursively look at the pointed-to type nodes to get the first one that is not a a pointer_type_def node. This is what a leaf pointed-to type node means.
Otherwise, if the pointed-to type node of pointer_type_def is *NOT* a pointer_type_def node, then just return the pointed-to type node.
And if the type node considered is not a pointer_type_def node, then just return it.
type
. Return the leaf underlying type of a qualified or typedef type.
If the underlying type is itself a qualified or typedef type, then recursively return the first underlying type of that qualified or typedef type to return the first underlying type that is not a qualified or typedef type.
If the underlying type is NOT a qualified nor a typedef type, then just return that underlying type.
type | the qualified or typedef type to consider. |
type_base_sptr peel_qualified_or_typedef_type | ( | const type_base_sptr & | t | ) |
Return the leaf underlying type of a qualified or typedef type.
If the underlying type is itself a qualified or typedef type, then recursively return the first underlying type of that qualified or typedef type to return the first underlying type that is not a qualified or typedef type.
If the underlying type is NOT a qualified nor a typedef type, then just return that underlying type.
type | the qualified or typedef type to consider. |
Return the leaf underlying type of a qualified type.
If the underlying type is itself a qualified type, then recursively return the first underlying type of that qualified type to return the first underlying type that is not a qualified type.
If the underlying type is NOT a qualified type, then just return that underlying type.
type | the qualified type to consider. |
const type_base_sptr peel_qualified_type | ( | const type_base_sptr & | type | ) |
Return the leaf underlying type of a qualified type.
If the underlying type is itself a qualified type, then recursively return the first underlying type of that qualified type to return the first underlying type that is not a qualified type.
If the underlying type is NOT a qualified type, then just return that underlying type.
type | the qualified type to consider. |
Return the leaf pointed-to type node of a reference_type_def node.
If the pointed-to type of a reference_type_def node is itself a reference_type_def node, then recursively look at the pointed-to type nodes to get the first one that is not a a reference_type_def node. This is what a leaf pointed-to type node means.
Otherwise, if the pointed-to type node of reference_type_def is *NOT* a reference_type_def node, then just return the pointed-to type node.
And if the type node considered is not a reference_type_def node, then just return it.
type
. type_base_sptr peel_reference_type | ( | const type_base_sptr & | type | ) |
Return the leaf pointed-to type node of a reference_type_def node.
If the pointed-to type of a reference_type_def node is itself a reference_type_def node, then recursively look at the pointed-to type nodes to get the first one that is not a a reference_type_def node. This is what a leaf pointed-to type node means.
Otherwise, if the pointed-to type node of reference_type_def is *NOT* a reference_type_def node, then just return the pointed-to type node.
And if the type node considered is not a reference_type_def node, then just return it.
type
. Return the leaf underlying or pointed-to type node of a typedef_decl, pointer_type_def or reference_type_def node.
type | the type to peel. |
type
. Return the leaf underlying or pointed-to type node of a typedef_decl, pointer_type_def or reference_type_def node.
type | the type to peel. |
type
. 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.
type | the type to peel. |
type
. Return the leaf underlying type node of a typedef_decl node.
If the underlying type of a typedef_decl node is itself a typedef_decl node, then recursively look at the underlying type nodes to get the first one that is not a a typedef_decl node. This is what a leaf underlying type node means.
Otherwise, if the underlying type node of typedef_decl is *NOT* a typedef_decl node, then just return the underlying type node.
And if the type node considered is not a typedef_decl node, then just return it.
type
. type_base_sptr peel_typedef_type | ( | const type_base_sptr & | type | ) |
Return the leaf underlying type node of a typedef_decl node.
If the underlying type of a typedef_decl node is itself a typedef_decl node, then recursively look at the underlying type nodes to get the first one that is not a a typedef_decl node. This is what a leaf underlying type node means.
Otherwise, if the underlying type node of typedef_decl is *NOT* a typedef_decl node, then just return the underlying type node.
And if the type node considered is not a typedef_decl node, then just return it.
type
. Pop a pair of operands from the stack of operands to the current type comparison.
For more information on this, please look at the description of the environment::privright_type_comp_operands_ data member.
left | the left-hand-side comparison operand we expect to pop from the top of the stack. If this doesn't match the operand found on the top of the stack, the function aborts. |
right | the right-hand-side comparison operand we expect to pop from the bottom of the stack. If this doesn't match the operand found on the top of the stack, the function aborts. |
Push a pair of operands on the stack of operands of the current type comparison, during type canonicalization.
For more information on this, please look at the description of the environment::priv::right_type_comp_operands_ data member.
left | the left-hand-side comparison operand to push. |
right | the right-hand-side comparison operand to push. |
void remove_decl_from_scope | ( | decl_base_sptr | decl | ) |
bool return_comparison_result | ( | T & | l, |
T & | r, | ||
bool | value | ||
) |
Return the result of the comparison of two (sub) types.
The function does the necessary book keeping before returning the result of the comparison of two (sub) types.
The book-keeping done is essentially about type comparison cycle detection.
l | the left-hand-side operand of the type comparison |
r | the right-hand-side operand of the type comparison |
value | the result of the comparison of l and r . |
value
. void set_data_member_is_laid_out | ( | var_decl_sptr | m, |
bool | l | ||
) |
void set_data_member_offset | ( | var_decl_sptr | m, |
uint64_t | o | ||
) |
void set_member_access_specifier | ( | const decl_base_sptr & | d, |
access_specifier | a | ||
) |
void set_member_access_specifier | ( | decl_base & | d, |
access_specifier | a | ||
) |
void set_member_function_is_const | ( | const function_decl_sptr & | f, |
bool | is_const | ||
) |
void set_member_function_is_const | ( | function_decl & | f, |
bool | is_const | ||
) |
void set_member_function_is_ctor | ( | const function_decl_sptr & | f, |
bool | c | ||
) |
void set_member_function_is_ctor | ( | function_decl & | f, |
bool | c | ||
) |
void set_member_function_is_dtor | ( | const function_decl_sptr & | f, |
bool | d | ||
) |
void set_member_function_is_dtor | ( | function_decl & | f, |
bool | d | ||
) |
void set_member_function_virtuality | ( | const function_decl_sptr & | fn, |
bool | is_virtual, | ||
ssize_t | voffset | ||
) |
void set_member_function_virtuality | ( | function_decl & | fn, |
bool | is_virtual, | ||
ssize_t | voffset | ||
) |
void set_member_function_virtuality | ( | function_decl * | fn, |
bool | is_virtual, | ||
ssize_t | voffset | ||
) |
void set_member_is_static | ( | const decl_base_sptr & | d, |
bool | s | ||
) |
Sets the static-ness property of a class member.
d | the class member to set the static-ness property for. Note that this must be a class member otherwise the function aborts the current process. |
s | this must be true if the member is to be static, false otherwise. |
void set_member_is_static | ( | decl_base & | d, |
bool | s | ||
) |
Sets the static-ness property of a class member.
d | the class member to set the static-ness property for. Note that this must be a class member otherwise the function aborts the current process. |
s | this must be true if the member is to be static, false otherwise. |
hash_t set_or_get_cached_hash_value | ( | const T & | tod | ) |
Set the hash value of an IR node and return it.
If the IR node already has a hash value set, this function just returns it. Otherwise, the function computes a new hash value and sets it to the IR node.
Note that if the IR node is a non-canonicalizeable type, no hash value is computed and an empty hash is returned.
This is a sub-routine of the type_or_decl_base::hash_value() virtual member functions.
type_or_decl | the IR node to compute the value for. |
Definition at line 414 of file abg-ir-priv.h.
hash_t set_or_get_cached_hash_value | ( | const T * | artifact | ) |
Set the hash value of an IR node and return it.
If the IR node already has a hash value set, this function just returns it. Otherwise, the function computes a new hash value and sets it to the IR node.
Note that if the IR node is a non-canonicalizeable type, no hash value is computed and an empty hash is returned.
This is a sub-routine of the type_or_decl_base::hash_value() virtual member functions.
type_or_decl | the IR node to compute the value for. |
Definition at line 439 of file abg-ir-priv.h.
void sort_and_canonicalize_types | ( | IteratorType | begin, |
IteratorType | end, | ||
deref_lambda | deref | ||
) |
Sort and canonicalize a sequence of types.
Note that this function does NOT hash the types. It thus assumes that the types are allready hashed.
Operations must be done in that order (sorting and then canonicalizing) to get predictable results.
begin | an iterator pointing to the first element of the sequence of types to hash and canonicalize. |
begin | an iterator pointing past-the-end of the sequence of types to hash and canonicalize. |
deref | this is a lambda that is used to dereference the types contained in the sequence referenced by iterators begin and end . |
Definition at line 1580 of file abg-ir-priv.h.
void sort_types | ( | const canonical_type_sptr_set_type & | types, |
vector< type_base_sptr > & | result | ||
) |
void sort_types_for_hash_computing_and_c14n | ( | IteratorType | begin, |
IteratorType | end | ||
) |
Sort types before hashing (and then canonicalizing) them.
begin | an iterator pointing to the beginning of the sequence of types to sort. |
end | an iterator pointing to the end of the sequence of types to sort. |
Definition at line 1417 of file abg-ir-priv.h.
void sort_types_for_hash_computing_and_c14n | ( | vector< type_base_sptr > & | types | ) |
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.
s | the string to convert. |
b | the resulting 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.
s | the string to convert. |
t | the resulting 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.
s | the string to convert. |
b | the resulting 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.
l | the string representing the language. |
void strip_redundant_quals_from_underyling_types | ( | const qualified_type_def_sptr & | t | ) |
Merge redundant qualifiers from a tree of qualified types.
Suppose a tree of qualified types leads to:
const virtual const restrict const int;
Suppose the IR tree of qualified types ressembles (with C meaning const, V meaning virtual and R meaning restrict):
[C|V]–>[C|R] –>[C] –> [int].
This function walks the IR and remove the redundant CV qualifiers so the IR becomes:
[C|V] –> [R] –> [] –>[int].
Note that the empty qualified type (noted []) represents a qualified type with no qualifier. It's rare, but it can exist. I've put it here just for the sake of example.
The resulting IR thus represents the (merged) type:
const virtual restrict int.
t | the qualified type to consider. The IR below the argument to this parameter will be edited to remove redundant qualifiers where applicable. |
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.
Also recursively strip typedefs from the sub-types of the type given in arguments.
Note that this function builds types in which typedefs are stripped off. Usually, types are held by their scope, so their life time is bound to the life time of their scope. But as this function cannot really insert the built type into it's scope, it must ensure that the newly built type stays live long enough.
So, if the newly built type has a canonical type, this function returns the canonical type. Otherwise, this function ensure that the newly built type has a life time that is the same as the life time of the entire libabigail library.
type | the type to strip the typedefs from. |
type
if it has no typedef in any of its sub-types. decl_base_sptr strip_useless_const_qualification | ( | const qualified_type_def_sptr | t | ) |
Strip qualification from a qualified type, when it makes sense.
DWARF constructs "const reference". This is redundant because a reference is always const. It also constructs the useless "const void" type. The issue is these redundant types then leak into the IR and make for bad diagnostics.
This function thus strips the const qualifier from the type in that case. It might contain code to strip other cases like this in the future.
t | the type to strip const qualification from. |
t
. 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.
This function is like lookup_function_type_in_translation_unit() execept that it constructs the function type from the sub-types found in the translation, rather than just looking for the function types held by the translation unit. This can be useful if the translation unit doesnt hold the function type we are looking for (i.e, lookup_function_type_in_translation_unit() returned NULL) but we still want to see if the sub-types of the function types are present in the translation unit.
fn_type | the function type to consider. |
tu | the translation unit to look into. |
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.
So this function first looks the type up in the translation unit. If it's found, then OK, it's returned. Otherwise, if it's a qualified, reference or pointer or function type (a composite type), lookup the underlying type, synthesize the type we want from it and return it.
If the underlying types is not not found, then give up and return nil.
string translation_unit_language_to_string | ( | translation_unit::language | l | ) |
Converts a translation_unit::language enumerator into a string.
l | the language enumerator to translate. |
bool try_canonical_compare | ( | const T * | l, |
const T * | r | ||
) |
Compare two types by comparing their canonical types if present.
If the canonical types are not present (because the types have not yet been canonicalized, for instance) then the types are compared structurally.
l | the first type to take into account in the comparison. |
r | the second type to take into account in the comparison. |
type_base * type_has_non_canonicalized_subtype | ( | type_base_sptr | t | ) |
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.
t_v1 | the first version of the type. |
t_v2 | the second version of the type. |
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.
For now this function returns true only for types originating from ELF. For types originating from ABIXML, for instance, the function return false, meaning that types originating from ABIXML should NOT be hashed.
t | the type to consider. |
type
should be considered for hashing. type_base_sptr type_or_void | ( | const type_base_sptr | t, |
const environment & | env | ||
) |
bool type_originates_from_corpus | ( | type_base_sptr | t, |
corpus_sptr & | c | ||
) |
Test if a type originates from a corpus.
Note that this function supports testing if a type originates from a corpus group.
t | the type to consider. |
c | the corpus or corpus group to consider. |
t
originates from the corpus (or group) c
. bool types_are_compatible | ( | const decl_base_sptr | d1, |
const decl_base_sptr | d2 | ||
) |
Test if two types are equal modulo a typedef.
Type A and B are compatible if
type1 | the declaration of the first type to consider. |
type2 | the declaration of the second type to consider. |
type1
and type2
are compatible. bool types_are_compatible | ( | const type_base_sptr | type1, |
const type_base_sptr | type2 | ||
) |
Test if two types are equal modulo a typedef or CV qualifiers.
Type A and B are compatible if
type1 | the first type to consider. |
type2 | the second type to consider. |
type1
and type2
are compatible. 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.
const and volatile qualifiers are completely ignored.
typedef are resolved to their definitions; their names are ignored.
Two indirect types (pointers, references or arrays) have similar structure if their underlying types are of the same kind and have the same name. In the indirect types case, the size of the underlying type does not matter.
Two direct types (i.e, non indirect) have a similar structure if they have the same kind, name and size. Two class types have similar structure if they have the same name, size, and if the types of their data members have similar types.
first | the first type to consider. |
second | the second type to consider. |
indirect_type | if true, then consider first and second as being underlying types of indirect types. Meaning that their size does not matter. |
first
and second
have similar structures. 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.
const and volatile qualifiers are completely ignored.
typedef are resolved to their definitions; their names are ignored.
Two indirect types (pointers or references) have similar structure if their underlying types are of the same kind and have the same name. In the indirect types case, the size of the underlying type does not matter.
Two direct types (i.e, non indirect) have a similar structure if they have the same kind, name and size. Two class types have similar structure if they have the same name, size, and if the types of their data members have similar types.
first | the first type to consider. |
second | the second type to consider. |
indirect_type | whether to do an indirect comparison |
first
and second
have similar structures. 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.
This is helpful to later detect recursive cycles in the comparison stack.
Note that the types must have been passed to mark_types_as_being_compared prior to calling this function.
l | the left-hand-side operand of the comparison. |
@parm r the right-hand-side operand of the comparison.
void unmark_types_as_being_compared | ( | T & | l, |
T & | r | ||
) |
Mark a pair of types as being not compared anymore.
This is helpful to later detect recursive cycles in the comparison stack.
Note that the types must have been passed to mark_types_as_being_compared prior to calling this function.
l | the left-hand-side operand of the comparison. |
@parm r the right-hand-side operand of the comparison.
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.
If the two intances are different modulo their type, set a bitfield to give some insight about the kind of differences there are.
l | the first artifact of the comparison. |
r | the second artifact of the comparison. |
k | a pointer to a bitfield that gives information about the kind of changes there are between l and r . This one is set iff k is non-null and the function returns false. |
Please note that setting k to a non-null value does have a negative performance impact because even if l
and r
are not equal, the function keeps up the comparison in order to determine the different kinds of ways in which they are different.
l
equals r
, false otherwise.