libabigail

The private data of the environment type. More...
#include <abgirpriv.h>
Public Member Functions  
void  add_to_types_with_non_confirmed_propagated_ct (const type_base *t) 
Add a given type to the set of types that have been nonconfirmed subjects of the canonical type propagation optimization. More...  
bool  allow_type_comparison_results_caching () const 
Check whether if caching of the subtypes comparison results during the invocation of the equal overloads for class and function types is in effect. More...  
void  allow_type_comparison_results_caching (bool f) 
Allow caching of the subtypes comparison results during the invocation of the equal overloads for class and function types. More...  
template<typename T >  
void  cache_type_comparison_result (T &first, T &second, bool r) 
Cache the result of comparing two subtypes. More...  
void  cancel_all_non_confirmed_propagated_canonical_types () 
Cancel the propagated canonical types of all the types which propagated canonical type have not yet been confirmed. More...  
void  cancel_ct_propagation (const type_base *t) 
Reset the canonical type (set it nullptr) of a type that has been the target of canonical type propagation. More...  
void  cancel_ct_propagation_for_types_dependant_on (const type_base *target) 
Reset the canonical type (set it nullptr) of a set of types that have been the target of canonical type propagation and that depend on a given recursive type. More...  
void  clear_propagated_canonical_type (const type_base *t) 
Clear the propagated canonical type of a given type. More...  
void  clear_type_comparison_results_cache () 
Clear the cache type comparison results. More...  
bool  collect_types_that_depends_on (const type_base *target, const pointer_set &types, pointer_set &collected) 
Collect the types that depends on a given "target" type. More...  
void  confirm_ct_propagation () 
Mark all the types that have been the target of canonical type propagation and that are not yet confirmed as being permanently canonicalized (aka confirmed). More...  
void  confirm_ct_propagation (const type_base *t) 
Mark a type that has been the target of canonical type propagation as being permanently canonicalized. More...  
void  confirm_ct_propagation_for_types_dependant_on (const type_base *dependant_type) 
Mark a set of types that have been the target of canonical type propagation and that depend on a recursive type as being permanently canonicalized. More...  
bool  is_recursive_type (const type_base *t) 
Test if a type is a recursive one. More...  
template<typename T >  
bool  is_type_comparison_cached (T &first, T &second, bool &r) 
Retrieve the result of comparing two subtypes from the cache, if it was previously stored. More...  
bool  mark_dependant_types (const type_base *type, vector< const type_base * > &types) 
Mark all the types that comes after a certain one as NOT being eligible for the canonical type propagation optimization. More...  
bool  mark_dependant_types_compared_until (const type_base *right) 
In the stack of the current types being compared (as part of type canonicalization), mark all the types that comes after a certain one as NOT being eligible to the canonical type propagation optimization. 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...  
bool  propagate_ct (const type_base &src, const type_base &dest) 
Propagate the canonical type of a type to another one. 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_from_types_with_non_confirmed_propagated_ct (const type_base *dependant) 
Remove a given type from the set of types that have been nonconfirmed subjects of the canonical type propagation optimization. More...  
void  set_is_not_recursive (const type_base *t) 
Unflag a type as being recursive. More...  
Public Attributes  
bool  allow_type_comparison_results_caching_ 
optional< bool >  analyze_exported_interfaces_only_ 
canonical_types_map_type  canonical_types_ 
bool  canonicalization_is_done_ 
config  config_ 
bool  decl_only_class_equals_definition_ 
bool  do_on_the_fly_canonicalization_ 
vector< type_base_sptr >  extra_live_types_ 
class_set_type  left_classes_being_compared_ 
fn_set_type  left_fn_types_being_compared_ 
vector< const type_base * >  left_type_comp_operands_ 
pointer_set  recursive_types_ 
class_set_type  right_classes_being_compared_ 
fn_set_type  right_fn_types_being_compared_ 
vector< const type_base * >  right_type_comp_operands_ 
vector< type_base_sptr >  sorted_canonical_types_ 
interned_string_pool  string_pool_ 
type_comparison_result_type  type_comparison_results_cache_ 
pointer_set  types_with_non_confirmed_propagated_ct_ 
bool  use_enum_binary_only_equality_ 
type_base_sptr  variadic_marker_type_ 
type_base_sptr  void_type_ 
The private data of the environment type.
Definition at line 388 of file abgirpriv.h.

inline 
Add a given type to the set of types that have been nonconfirmed subjects of the canonical type propagation optimization.
t  the dependant type to consider. 
Definition at line 1087 of file abgirpriv.h.

inline 
Check whether if caching of the subtypes comparison results during the invocation of the equal overloads for class and function types is in effect.
Definition at line 552 of file abgirpriv.h.

inline 
Allow caching of the subtypes comparison results during the invocation of the equal overloads for class and function types.
f  if true, allow type comparison result caching. 
Definition at line 541 of file abgirpriv.h.

inline 
Cache the result of comparing two subtypes.
first  the first subtype that has been compared. Its address is going to be stored in the cache. 
second  the second subtype that has been compared. Its address is going to be stored in the cache. 
r  the result of comparing first and second . This is going to be stored in the cache, as well as the addresses of first and second . 
Definition at line 568 of file abgirpriv.h.

inline 
Cancel the propagated canonical types of all the types which propagated canonical type have not yet been confirmed.
Definition at line 1108 of file abgirpriv.h.

inline 
Reset the canonical type (set it nullptr) of a type that has been the target of canonical type propagation.
This also resets the propagated canonical type of the set of types that depends on a given recursive type.
Once the canonical type of a type in that set is reset, the type is marked as being nondependant on a recursive type anymore.
To understand the sentences above, please read the description of type canonicalization and especially about the "canonical type propagation optimization" at Onthefly Canonicalization, in the src/abgir.cc file.
target  if a type which has been subject to the canonical type propagation optimizationdepends on a this target type, then cancel its canonical type. 
Definition at line 1041 of file abgirpriv.h.

inline 
Reset the canonical type (set it nullptr) of a set of types that have been the target of canonical type propagation and that depend on a given recursive type.
Once the canonical type of a type in that set is reset, the type is marked as being nondependant on a recursive type anymore.
To understand the sentences above, please read the description of type canonicalization and especially about the "canonical type propagation optimization" at Onthefly Canonicalization, in the src/abgir.cc file.
target  if a type which has been subject to the canonical type propagation optimizationdepends on a this target type, then cancel its canonical type. 
Definition at line 999 of file abgirpriv.h.

inline 
Clear the propagated canonical type of a given type.
This function also updates the bookkeeping of the set of types which propagated canonical types have been cleared.
Please note that at the end of the canonicalization of all the types in the system, all the types which propagated canonical type has been cleared must be canonicalized.
t  the type to 
Definition at line 1068 of file abgirpriv.h.

inline 
Clear the cache type comparison results.
Definition at line 624 of file abgirpriv.h.

inline 
Collect the types that depends on a given "target" type.
Walk a set of types and if they depend directly or indirectly on a "target" type, then collect them into a set.
target  the target type to consider. 
types  the types to walk to detect those who depend on target . 
types
is found to depend on target
. Definition at line 960 of file abgirpriv.h.

inline 
Mark all the types that have been the target of canonical type propagation and that are not yet confirmed as being permanently canonicalized (aka confirmed).
To understand the sentence above, please read the description of type canonicalization and especially about the "canonical type propagation optimization" at Onthefly Canonicalization, in the src/abgir.cc file.
Definition at line 883 of file abgirpriv.h.

inline 
Mark a type that has been the target of canonical type propagation as being permanently canonicalized.
This function also marks the set of types that have been the target of canonical type propagation and that depend on a recursive type as being permanently canonicalized.
To understand the sentence above, please read the description of type canonicalization and especially about the "canonical type propagation optimization" at Onthefly Canonicalization, in the src/abgir.cc file.
Definition at line 857 of file abgirpriv.h.

inline 
Mark a set of types that have been the target of canonical type propagation and that depend on a recursive type as being permanently canonicalized.
To understand the sentence above, please read the description of type canonicalization and especially about the "canonical type propagation optimization" at Onthefly Canonicalization, in the src/abgir.cc file.
Definition at line 824 of file abgirpriv.h.

inline 
Test if a type is a recursive one.
t  the type to consider. 
t
is recursive. Definition at line 777 of file abgirpriv.h.

inline 
Retrieve the result of comparing two subtypes from the cache, if it was previously stored.
first  the first subtype to consider. 
second  the second subtype to consider. The pair of addresses of {first , second} is going to be looked up in the cache. If it's present, then the associated result of the comparison of first against second is present as well, and is returned. 
r  this is an out parameter which is set to the result of the comparison of first against second if the pair of addresses of {first , second} is present in the cache. 
first
, second}
is present in the cache. In that case, the associated result of the comparison of first
against second
is returned in the argument of r
. Definition at line 606 of file abgirpriv.h.
Mark all the types that comes after a certain one as NOT being eligible for the canonical type propagation optimization.
type  the type that represents the "marker type". All types after this one will be marked as being NONeligible to the canonical type propagation optimization. 
types  the set of types to consider. In that vector, all types that come after type are going to be marked as being noneligible to the canonical type propagation optimization. 
Definition at line 685 of file abgirpriv.h.

inline 
In the stack of the current types being compared (as part of type canonicalization), mark all the types that comes after a certain one as NOT being eligible to the canonical type propagation optimization.
For a starter, please read about the Onthefly Canonicalization, aka, "canonical type propagation optimization".
To implement that optimization, we need, among other things to maintain stack of the types (and their subtypes) being currently compared as part of type canonicalization.
Note that we only consider the type that is the righthandside operand of the comparison because it's that one that is being canonicalized and thus, that is not yet canonicalized.
The reason why a type is deemed NONeligible to the canonical type propagation optimization is that it "depends" on recursively present type. Let me explain.
Suppose we have a type T that has subtypes named ST0 and ST1. Suppose ST1 itself has a subtype that is T itself. In this case, we say that T is a recursive type, because it has T (itself) as one of its subtypes:
T +– ST0  +– ST1 +  +– T
ST1 is said to "depend" on T because it has T as a subtype. But because T is recursive, then ST1 is said to depend on a recursive type. Notice however that ST0 does not depend on any recursive type.
When we are at the point of comparing the subtype T of ST1 against its counterpart, the stack of the righthandside operands of the type canonicalization is going to look like this:
 T  ST1 
We don't add the type T to the stack as we detect that T was already in there (recursive cycle).
So, this function will basically mark ST1 as being NONeligible to being the target of canonical type propagation.
right  the righthandside operand of the type comparison. 
Definition at line 760 of file abgirpriv.h.

inline 
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 right_type_comp_operands_ data member.
left  the lefthandside 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 righthandside 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. 
Definition at line 660 of file abgirpriv.h.
Propagate the canonical type of a type to another one.
src  the type to propagate the canonical type from. 
dest  the type to propagate the canonical type of src to. 
Definition at line 800 of file abgirpriv.h.

inline 
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 right_type_comp_operands_ data member.
left  the lefthandside comparison operand to push. 
right  the righthandside comparison operand to push. 
Definition at line 637 of file abgirpriv.h.

inline 
Remove a given type from the set of types that have been nonconfirmed subjects of the canonical type propagation optimization.
dependant  the dependant type to consider. 
Definition at line 1099 of file abgirpriv.h.

inline 
Unflag a type as being recursive.
t  the type to unflag 
Definition at line 788 of file abgirpriv.h.