libabigail
|
The base type of class_decl and union_decl. More...
#include <abg-ir.h>
Classes | |
struct | hash |
Hasher for the class_or_union type. More... | |
struct | priv |
Public Types | |
typedef vector< type_base_sptr > | member_types |
Convenience typedef. | |
typedef vector< var_decl_sptr > | data_members |
Convenience typedef. | |
typedef vector< method_decl_sptr > | member_functions |
Convenience typedef. | |
typedef unordered_map< ssize_t, member_functions > | virtual_mem_fn_map_type |
Convenience typedef. | |
typedef unordered_map< string, method_decl * > | string_mem_fn_ptr_map_type |
Convenience typedef. | |
typedef unordered_map< string, method_decl_sptr > | string_mem_fn_sptr_map_type |
Convenience typedef. | |
![]() | |
typedef std::vector< decl_base_sptr > | declarations |
Convenience typedef for a vector of decl_base_sptr. | |
typedef std::vector< function_type_sptr > | function_types |
Convenience typedef for a vector of function_type_sptr. | |
typedef std::vector< scope_decl_sptr > | scopes |
Convenience typedef for a vector of scope_decl_sptr. | |
![]() | |
enum | binding { BINDING_NONE , BINDING_LOCAL , BINDING_GLOBAL , BINDING_WEAK } |
ELF binding. More... | |
enum | visibility { VISIBILITY_NONE , VISIBILITY_DEFAULT , VISIBILITY_PROTECTED , VISIBILITY_HIDDEN , VISIBILITY_INTERNAL } |
ELF visibility. More... | |
![]() | |
enum | type_or_decl_kind { ABSTRACT_TYPE_OR_DECL , ABSTRACT_DECL_BASE , ABSTRACT_SCOPE_DECL , GLOBAL_SCOPE_DECL , NAMESPACE_DECL , VAR_DECL , FUNCTION_DECL , FUNCTION_PARAMETER_DECL , METHOD_DECL , TEMPLATE_DECL , ABSTRACT_TYPE_BASE , ABSTRACT_SCOPE_TYPE_DECL , BASIC_TYPE , SUBRANGE_TYPE , QUALIFIED_TYPE , POINTER_TYPE , REFERENCE_TYPE , POINTER_TO_MEMBER_TYPE , ARRAY_TYPE , ENUM_TYPE , TYPEDEF_TYPE , CLASS_TYPE , UNION_TYPE , FUNCTION_TYPE , METHOD_TYPE } |
This is a bitmap type which instance is meant to contain the runtime type of a given ABI artifact. Bits of the identifiers of the type of a given artifact as well as the types it inherits from are to be set to 1. More... | |
Public Member Functions | |
class_or_union (const environment &env, const string &name, bool is_declaration_only=true) | |
Constructor of the class_or_union type. | |
class_or_union (const environment &env, const string &name, size_t size_in_bits, size_t align_in_bits, const location &locus, visibility vis) | |
A constructor for instances of class_or_union. | |
class_or_union (const environment &env, const string &name, size_t size_in_bits, size_t align_in_bits, const location &locus, visibility vis, member_types &mbrs, data_members &data_mbrs, member_functions &member_fns) | |
A Constructor for instances of class_or_union. | |
virtual | ~class_or_union () |
Destrcutor of the class_or_union type. | |
void | add_data_member (var_decl_sptr v, access_specifier a, bool is_laid_out, bool is_static, size_t offset_in_bits) |
Add a data member to the current instance of class_or_union. | |
void | add_member_class_template (member_class_template_sptr m) |
Append a member class template to the class_or_union. | |
void | add_member_function (method_decl_sptr f, access_specifier a, bool is_static, bool is_ctor, bool is_dtor, bool is_const) |
Add a member function. | |
void | add_member_function (method_decl_sptr f, access_specifier a, bool is_virtual, size_t vtable_offset, bool is_static, bool is_ctor, bool is_dtor, bool is_const) |
Add a member function to the current instance of class_or_union. | |
void | add_member_function_template (member_function_template_sptr) |
Append a member function template to the class_or_union. | |
const var_decl_sptr | find_anonymous_data_member (const var_decl_sptr &) const |
Find an anonymous data member in the class. | |
const var_decl_sptr | find_data_member (const string &) const |
Find a data member of a given name in the current class_or_union. | |
const var_decl_sptr | find_data_member (const var_decl_sptr &) const |
Find a given data member. | |
method_decl * | find_member_function (const string &mangled_name) |
Find a method, using its linkage name as a key. | |
const method_decl * | find_member_function (const string &mangled_name) const |
Find a method, using its linkage name as a key. | |
method_decl * | find_member_function_from_signature (const string &s) |
Find a method (member function) using its signature (pretty representation) as a key. | |
const method_decl * | find_member_function_from_signature (const string &s) const |
Find a method (member function) using its signature (pretty representation) as a key. | |
method_decl_sptr | find_member_function_sptr (const string &mangled_name) |
Find a method, using its linkage name as a key. | |
virtual size_t | get_alignment_in_bits () const |
Getter of the alignment of the class_or_union type. | |
const data_members & | get_data_members () const |
Get the data members of this class_or_union. | |
const member_class_templates & | get_member_class_templates () const |
Get the member class templates of this class. | |
const member_function_templates & | get_member_function_templates () const |
Get the member function templates of this class. | |
const member_functions & | get_member_functions () const |
Get the member functions of this class_or_union. | |
const data_members & | get_non_static_data_members () const |
Get the non-static data members of this class_or_union. | |
virtual size_t | get_num_anonymous_member_classes () const |
Get the number of anonymous member classes contained in this class. | |
virtual size_t | get_num_anonymous_member_enums () const |
Get the number of anonymous member enums contained in this class. | |
virtual size_t | get_num_anonymous_member_unions () const |
Get the number of anonymous member unions contained in this class. | |
virtual size_t | get_size_in_bits () const |
Getter of the size of the class_or_union type. | |
const data_members & | get_static_data_members () const |
Get the static data memebers of this class_or_union. | |
bool | has_no_member () const |
virtual hash_t | hash_value () const |
Return the hash value of the current IR node. | |
virtual bool | operator== (const class_or_union &) const |
Equality operator. | |
virtual bool | operator== (const decl_base &) const |
Equality operator. | |
virtual bool | operator== (const type_base &) const |
Equality operator. | |
virtual void | set_alignment_in_bits (size_t) |
Setter of the alignment of the class type. | |
virtual void | set_size_in_bits (size_t) |
Setter of the size of the class_or_union type. | |
virtual bool | traverse (ir_node_visitor &v) |
This implements the ir_traversable_base::traverse pure virtual function. | |
![]() | |
scope_type_decl (const environment &env, const string &name, size_t size_in_bits, size_t alignment_in_bits, const location &locus, visibility vis=VISIBILITY_DEFAULT) | |
Constructor. | |
![]() | |
scope_decl (const environment &env, const string &name, const location &locus, visibility vis=VISIBILITY_DEFAULT) | |
Constructor of the scope_decl type. | |
scope_decl (const environment &env, location &l) | |
Constructor of the scope_decl type. | |
void | add_member_type (type_base_sptr t) |
Add a member type to the current instance of class_or_union. | |
type_base_sptr | add_member_type (type_base_sptr t, access_specifier a) |
Add a member type to the current instance of class_or_union. | |
bool | find_iterator_for_member (const decl_base *, declarations::iterator &) |
Find a member of the current scope and return an iterator on it. | |
bool | find_iterator_for_member (const decl_base_sptr, declarations::iterator &) |
Find a member of the current scope and return an iterator on it. | |
type_base_sptr | find_member_type (const string &name) const |
Find a member type of a given name, inside the current scope_decl. | |
canonical_type_sptr_set_type & | get_canonical_types () |
@eturn the set of canonical types of the the current scope. | |
const canonical_type_sptr_set_type & | get_canonical_types () const |
@eturn the set of canonical types of the the current scope. | |
declarations & | get_member_decls () |
Getter for the member declarations carried by the current scope_decl. | |
const declarations & | get_member_decls () const |
Getter for the member declarations carried by the current scope_decl. | |
scopes & | get_member_scopes () |
Getter for the scopes carried by the current scope. | |
const scopes & | get_member_scopes () const |
Getter for the scopes carried by the current scope. | |
const type_base_sptrs_type & | get_member_types () const |
Get the member types of this scope_decl. | |
const type_base_sptrs_type & | get_sorted_canonical_types () const |
Return a vector of sorted canonical types of the current scope. | |
const declarations & | get_sorted_member_decls () const |
Getter for the sorted member declarations carried by the current scope_decl. | |
const type_base_sptrs_type & | get_sorted_member_types () const |
Get the sorted member types of this scope_decl. | |
void | insert_member_type (type_base_sptr t, declarations::iterator before) |
Insert a member type. | |
bool | is_empty () const |
Test if the current scope is empty. | |
void | remove_member_type (type_base_sptr t) |
Remove a member type from the current class_or_union scope. | |
![]() | |
decl_base (const environment &, const location &) | |
Constructor for the decl_base type. | |
decl_base (const environment &e, const interned_string &name, const location &locus, const interned_string &mangled_name=interned_string(), visibility vis=VISIBILITY_DEFAULT) | |
Constructor. | |
decl_base (const environment &e, const string &name, const location &locus, const string &mangled_name="", visibility vis=VISIBILITY_DEFAULT) | |
Constructor for the decl_base type. | |
virtual | ~decl_base () |
Destructor of the decl_base type. | |
const interned_string & | get_cached_pretty_representation (bool internal=false) const |
Get the pretty representation of the current decl. | |
context_rel * | get_context_rel () |
Getter for the context relationship. | |
const context_rel * | get_context_rel () const |
Getter for the context relationship. | |
const decl_base_sptr | get_definition_of_declaration () const |
If this decl_base is declaration-only, get its definition, if any. | |
const decl_base_sptr | get_earlier_declaration () const |
If this decl_base is a definition, get its earlier declaration. | |
bool | get_has_anonymous_parent () const |
Get the "has_anonymous_parent" flag of the current declaration. | |
bool | get_is_anonymous () const |
Test if the current declaration is anonymous. | |
bool | get_is_anonymous_or_has_anonymous_parent () const |
bool | get_is_declaration_only () const |
Test if a decl_base is a declaration-only decl. | |
bool | get_is_in_public_symbol_table () const |
Test if the decl is defined in a ELF symbol table as a public symbol. | |
const interned_string & | get_linkage_name () const |
Getter for the mangled name. | |
const location & | get_location () const |
Get the location of a given declaration. | |
const decl_base * | get_naked_definition_of_declaration () const |
If this decl_base is declaration-only, get its definition, if any. | |
virtual const interned_string & | get_name () const |
Getter for the name of the current decl. | |
typedef_decl_sptr | get_naming_typedef () const |
Getter for the naming typedef of the current decl. | |
virtual string | get_pretty_representation (bool internal=false, bool qualified_name=true) const |
Get the pretty representatin of the current declaration. | |
virtual const interned_string & | get_qualified_name (bool internal=false) const |
Return the qualified name of the decl. | |
virtual void | get_qualified_name (interned_string &qualified_name, bool internal=false) const |
Compute the qualified name of the decl. | |
const interned_string & | get_qualified_parent_name () const |
Return a copy of the qualified name of the parent of the current decl. | |
scope_decl * | get_scope () const |
Return the type containing the current decl, if any. | |
virtual const interned_string & | get_scoped_name () const |
Return the scoped name of the decl. | |
visibility | get_visibility () const |
Getter for the visibility of the decl. | |
virtual bool | operator!= (const decl_base &) const |
Inequality operator. | |
void | set_definition_of_declaration (const decl_base_sptr &) |
Set the definition of this declaration-only decl_base. | |
void | set_earlier_declaration (const decl_base_sptr &) |
set the earlier declaration of this decl_base definition. | |
void | set_is_anonymous (bool) |
Set the "is_anonymous" flag of the current declaration. | |
void | set_is_declaration_only (bool f) |
Set a flag saying if the enum_type_decl is a declaration-only enum_type_decl. | |
void | set_is_in_public_symbol_table (bool) |
Set the flag saying if this decl is from a symbol that is in a public symbols table, defined as public (global or weak). | |
virtual void | set_linkage_name (const string &m) |
Setter for the linkage name. | |
void | set_location (const location &l) |
Set the location for a given declaration. | |
virtual void | set_name (const string &n) |
Setter for the name of the decl. | |
void | set_naming_typedef (const typedef_decl_sptr &) |
Set the naming typedef of the current instance of decl_base. | |
virtual void | set_scope (scope_decl *) |
Setter of the scope of the current decl. | |
void | set_visibility (visibility v) |
Setter for the visibility of the decl. | |
![]() | |
type_or_decl_base (const environment &, enum type_or_decl_kind k=ABSTRACT_TYPE_OR_DECL) | |
Constructor of type_or_decl_base. | |
virtual | ~type_or_decl_base () |
The destructor of the type_or_decl_base type. | |
location & | get_artificial_location () const |
Getter of the artificial location of the artifact. | |
corpus * | get_corpus () |
Get the corpus this ABI artifact belongs to. | |
const corpus * | get_corpus () const |
Get the corpus this ABI artifact belongs to. | |
const environment & | get_environment () const |
Getter of the environment of the current ABI artifact. | |
bool | get_is_artificial () const |
Getter of the flag that says if the artefact is artificial. | |
translation_unit * | get_translation_unit () |
Get the translation_unit this ABI artifact belongs to. | |
const translation_unit * | get_translation_unit () const |
Get the translation_unit this ABI artifact belongs to. | |
bool | has_artificial_location () const |
Test if the current ABI artifact carries an artificial location. | |
enum type_or_decl_kind | kind () const |
Getter for the "kind" property of type_or_decl_base type. | |
void | set_artificial_location (const location &) |
Setter of the artificial location of the artificat. | |
void | set_is_artificial (bool) |
Setter of the flag that says if the artefact is artificial. | |
void | set_translation_unit (translation_unit *) |
Set the translation_unit this ABI artifact belongs to. | |
![]() | |
![]() | |
virtual | ~traversable_base () |
Destructor of the traversable_base type. | |
![]() | |
type_base (const environment &e, size_t s, size_t a) | |
The constructor of type_base. | |
const interned_string & | get_cached_pretty_representation (bool internal=false) const |
Get the pretty representation of the current type. | |
type_base_sptr | get_canonical_type () const |
Getter of the canonical type of the current instance of type_base. | |
type_base * | get_naked_canonical_type () const |
Getter of the canonical type pointer. | |
virtual bool | operator!= (const type_base &) const |
Inequality operator. | |
Public Attributes | |
priv * | priv_ |
![]() | |
priv * | priv_ |
![]() | |
std::unique_ptr< priv > | priv_ |
![]() | |
priv * | priv_ |
Protected Member Functions | |
virtual decl_base_sptr | add_member_decl (const decl_base_sptr &) |
Add a member declaration to the current instance of class_or_union. The member declaration can be either a member type, data member, member function, or member template. | |
decl_base_sptr | insert_member_decl (decl_base_sptr member) |
Insert a data member to this class_or_union type. | |
void | maybe_fixup_members_of_anon_data_member (var_decl_sptr &anon_dm) |
Fixup the members of the type of an anonymous data member. | |
virtual void | remove_member_decl (decl_base_sptr) |
Remove a given decl from the current class_or_union scope. | |
![]() | |
decl_base_sptr | insert_member_decl (decl_base_sptr member, declarations::iterator before) |
Insert a member decl to this scope, right before an element pointed to by a given iterator. Note that user code should not use this, but rather use insert_decl_into_scope. | |
![]() | |
decl_base (const decl_base &) | |
void | clear_qualified_name () |
Clear the qualified name of this decl. | |
const interned_string & | peek_qualified_name () const |
Getter for the qualified name. | |
const interned_string & | peek_temporary_qualified_name () const |
Getter of the temporary qualified name of the current declaration. | |
void | set_context_rel (context_rel *c) |
void | set_qualified_name (const interned_string &) const |
Setter for the qualified name. | |
void | set_temporary_qualified_name (const interned_string &) const |
Setter for the temporary qualified name of the current declaration. | |
![]() | |
void | kind (enum type_or_decl_kind) |
Setter for the "kind" property of type_or_decl_base type. | |
type_or_decl_base & | operator= (const type_or_decl_base &) |
void * | runtime_type_instance () |
Getter of the pointer to the runtime type sub-object of the current instance. | |
const void * | runtime_type_instance () const |
Getter of the pointer to the runtime type sub-object of the current instance. | |
void | runtime_type_instance (void *) |
Setter of the pointer to the runtime type sub-object of the current instance. | |
void | set_hash_value (hash_t) const |
void * | type_or_decl_base_pointer () |
Getter of the pointer to either the type_base sub-object of the current instance if it's a type, or to the decl_base sub-object of the current instance if it's a decl. | |
const void * | type_or_decl_base_pointer () const |
Getter of the pointer to either the type_base sub-object of the current instance if it's a type, or to the decl_base sub-object of the current instance if it's a decl. | |
![]() | |
traversable_base () | |
Default constructor of the traversable_base type. | |
bool | visiting () const |
This should returns false before and after the node has been visiting. During the visiting of the node (and of its children) this should return true. | |
void | visiting (bool f) |
The traversing code should be responsible of calling this, not the user code. | |
![]() | |
virtual void | on_canonical_type_set () |
This method is invoked automatically right after the current instance of class_decl has been canonicalized. | |
Friends | |
class | class_decl |
method_decl_sptr | copy_member_function (class_or_union_sptr &t, const method_decl *m) |
method_decl_sptr | copy_member_function (class_or_union_sptr &t, const method_decl_sptr &m) |
bool | equals (const class_decl &l, const class_decl &r, change_kind *k) |
Compares two instances of class_decl. | |
bool | equals (const class_or_union &l, const class_or_union &r, change_kind *k) |
Compares two instances of class_or_union. | |
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. | |
class | method_decl |
void | set_member_is_static (decl_base &d, bool s) |
Sets the static-ness property of a class member. | |
The base type of class_decl and union_decl.
vector<var_decl_sptr> data_members |
vector<method_decl_sptr> member_functions |
vector<type_base_sptr> member_types |
unordered_map<string, method_decl*> string_mem_fn_ptr_map_type |
unordered_map<string, method_decl_sptr> string_mem_fn_sptr_map_type |
unordered_map<ssize_t, member_functions> virtual_mem_fn_map_type |
class_or_union | ( | const environment & | env, |
const string & | name, | ||
size_t | size_in_bits, | ||
size_t | align_in_bits, | ||
const location & | locus, | ||
visibility | vis, | ||
member_types & | mem_types, | ||
data_members & | data_members, | ||
member_functions & | member_fns ) |
A Constructor for instances of class_or_union.
env | the environment we are operating from. |
name | the identifier of the class. |
size_in_bits | the size of an instance of class_or_union, expressed in bits |
align_in_bits | the alignment of an instance of class_or_union, expressed in bits. |
locus | the source location of declaration point this class. |
vis | the visibility of instances of class_or_union. |
mem_types | the vector of member types of this instance of class_or_union. |
data_members | the vector of data members of this instance of class_or_union. |
member_fns | the vector of member functions of this instance of class_or_union. |
class_or_union | ( | const environment & | env, |
const string & | name, | ||
size_t | size_in_bits, | ||
size_t | align_in_bits, | ||
const location & | locus, | ||
visibility | vis ) |
A constructor for instances of class_or_union.
env | the environment we are operating from. |
name | the name of the class. |
size_in_bits | the size of an instance of class_or_union, expressed in bits |
align_in_bits | the alignment of an instance of class_or_union, expressed in bits. |
locus | the source location of declaration point this class. |
vis | the visibility of instances of class_or_union. |
class_or_union | ( | const environment & | env, |
const string & | name, | ||
bool | is_declaration_only = true ) |
Constructor of the class_or_union type.
env | the environment we are operating from. |
name | the name of the class_or_union. |
is_declaration_only | a boolean saying whether the instance represents a declaration only, or not. |
|
virtual |
Destrcutor of the class_or_union type.
void add_data_member | ( | var_decl_sptr | v, |
access_specifier | access, | ||
bool | is_laid_out, | ||
bool | is_static, | ||
size_t | offset_in_bits ) |
Add a data member to the current instance of class_or_union.
v | a var_decl to add as a data member. A proper class_or_union::data_member is created from v and added to the class_or_union. This var_decl should not have been already added to a scope. |
access | the access specifier for the data member. |
is_laid_out | whether the data member was laid out. That is, if its offset has been computed. In the pattern of a class template for instance, this would be set to false. |
is_static | whether the data memer is static. |
offset_in_bits | if is_laid_out is true, this is the offset of the data member, expressed (oh, surprise) in bits. |
void add_member_class_template | ( | member_class_template_sptr | m | ) |
Append a member class template to the class_or_union.
m | the member function template to append. |
TODO: use our own ABG_ASSERTion facility that adds a meaningful error message or something like a structured error.
|
protectedvirtual |
Add a member declaration to the current instance of class_or_union. The member declaration can be either a member type, data member, member function, or member template.
d | the member declaration to add. |
Reimplemented from scope_decl.
void add_member_function | ( | method_decl_sptr | f, |
access_specifier | a, | ||
bool | is_static, | ||
bool | is_ctor, | ||
bool | is_dtor, | ||
bool | is_const ) |
Add a member function.
f | the new member function to add. |
a | the access specifier to use for the new member function. |
is_static | whether the new member function is static. |
is_ctor | whether the new member function is a constructor. |
is_dtor | whether the new member function is a destructor. |
is_const | whether the new member function is const. |
void add_member_function | ( | method_decl_sptr | f, |
access_specifier | a, | ||
bool | is_virtual, | ||
size_t | vtable_offset, | ||
bool | is_static, | ||
bool | is_ctor, | ||
bool | is_dtor, | ||
bool | is_const ) |
Add a member function to the current instance of class_or_union.
f | a method_decl to add to the current class. This function should not have been already added to a scope. |
access | the access specifier for the member function to add. |
is_virtual | if this is true then it means the function f is a virtual function. That also means that the current instance of class_or_union is actually an instance of class_decl. |
vtable_offset | the offset of the member function in the virtual table. This parameter is taken into account only if is_virtual is true. |
is_static | whether the member function is static. |
is_ctor | whether the member function is a constructor. |
is_dtor | whether the member function is a destructor. |
is_const | whether the member function is const. |
void add_member_function_template | ( | member_function_template_sptr | m | ) |
Append a member function template to the class_or_union.
m | the member function template to append. |
TODO: use our own ABG_ASSERTion facility that adds a meaningful error message or something like a structured error.
const var_decl_sptr find_anonymous_data_member | ( | const var_decl_sptr & | v | ) | const |
const var_decl_sptr find_data_member | ( | const string & | name | ) | const |
Find a data member of a given name in the current class_or_union.
name | the name of the data member to find in the current class_or_union. |
const var_decl_sptr find_data_member | ( | const var_decl_sptr & | v | ) | const |
Find a given data member.
This function takes a var_decl as an argument. If it has a non-empty name, then it tries to find a data member which has the same name as the argument.
If it has an empty name, then the var_decl is considered as an anonymous data member. In that case, this function tries to find an anonymous data member which type equals that of the var_decl argument.
v | this carries either the name of the data member we need to look for, or the type of the anonymous data member we are looking for. |
method_decl * find_member_function | ( | const string & | linkage_name | ) |
const method_decl * find_member_function | ( | const string & | linkage_name | ) | const |
method_decl * find_member_function_from_signature | ( | const string & | s | ) |
const method_decl * find_member_function_from_signature | ( | const string & | s | ) | const |
method_decl_sptr find_member_function_sptr | ( | const string & | linkage_name | ) |
|
virtual |
Getter of the alignment of the class_or_union type.
If this class_or_union is a declaration of a definition that is elsewhere, then the size of the definition is returned.
Reimplemented from type_base.
const class_or_union::data_members & get_data_members | ( | ) | const |
Get the data members of this class_or_union.
const member_class_templates & get_member_class_templates | ( | ) | const |
const member_function_templates & get_member_function_templates | ( | ) | const |
const class_or_union::member_functions & get_member_functions | ( | ) | const |
Get the member functions of this class_or_union.
const class_or_union::data_members & get_non_static_data_members | ( | ) | const |
Get the non-static data members of this class_or_union.
|
virtual |
Get the number of anonymous member classes contained in this class.
Reimplemented from scope_decl.
|
virtual |
Get the number of anonymous member enums contained in this class.
Reimplemented from scope_decl.
|
virtual |
Get the number of anonymous member unions contained in this class.
Reimplemented from scope_decl.
|
virtual |
Getter of the size of the class_or_union type.
If this class_or_union is a declaration of a definition that is elsewhere, then the size of the definition is returned.
Reimplemented from type_base.
const class_or_union::data_members & get_static_data_members | ( | ) | const |
Get the static data memebers of this class_or_union.
bool has_no_member | ( | ) | const |
|
virtual |
Return the hash value of the current IR node.
Note that upon the first invocation, this member functions computes the hash value and returns it. Subsequent invocations just return the hash value that was previously calculated.
Reimplemented from type_or_decl_base.
Reimplemented in class_decl, and union_decl.
|
protected |
Insert a data member to this class_or_union type.
d | the data member to insert. |
that
got inserted.
|
protected |
Fixup the members of the type of an anonymous data member.
Walk all data members of (the type of) a given anonymous data member and set a particular property of the relationship between each data member and its containing type.
That property records the fact that the data member belongs to the anonymous data member we consider.
In the future, if there are other properties of this relationship to set in this manner, they ought to be added here.
anon_dm | the anonymous data member to consider. |
|
virtual |
Equality operator.
other | the other class_or_union to compare against. |
other
equals the current class_or_union. Reimplemented in class_decl, and union_decl.
|
virtual |
Equality operator.
other | the other class_or_union to compare against. |
other
equals the current class_or_union. Reimplemented from scope_type_decl.
Reimplemented in class_decl, and union_decl.
|
virtual |
Equality operator.
other | the other class_or_union to compare against. |
other
equals the current class_or_union. Reimplemented from scope_type_decl.
Reimplemented in class_decl, and union_decl.
|
protectedvirtual |
Remove a given decl from the current class_or_union scope.
Note that only type declarations are supported by this method for now. Support for the other kinds of declaration is left as an exercise for the interested reader of the code.
decl | the declaration to remove from this class_or_union scope. |
Reimplemented from scope_decl.
|
virtual |
|
virtual |
Setter of the size of the class_or_union type.
If this class_or_union is a declaration of a definition that is elsewhere, then the new size is set to the definition.
s | the new size. |
Reimplemented from type_base.
|
virtual |
This implements the ir_traversable_base::traverse pure virtual function.
v | the visitor used on the member nodes of the translation unit during the traversal. |
Reimplemented from scope_type_decl.
Reimplemented in class_decl, and union_decl.
|
friend |
|
friend |
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.
|
friend |
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.
|
friend |
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. |
|
friend |
|
friend |
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. |