libabigail
|
A declaration that introduces a scope. More...
#include <abg-ir.h>
Public Types | |
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. | |
Public Types inherited from decl_base | |
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... | |
Public Types inherited from type_or_decl_base | |
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 | |
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. | |
virtual size_t | get_num_anonymous_member_classes () const |
Getter for the number of anonymous classes contained in this scope. | |
virtual size_t | get_num_anonymous_member_enums () const |
Getter for the number of anonymous enums contained in this scope. | |
virtual size_t | get_num_anonymous_member_unions () const |
Getter for the number of anonymous unions contained in this scope. | |
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. | |
virtual bool | operator== (const decl_base &) const |
Return true iff both scopes have the same names and have the same member decls. | |
void | remove_member_type (type_base_sptr t) |
Remove a member type from the current class_or_union scope. | |
virtual bool | traverse (ir_node_visitor &) |
This implements the ir_traversable_base::traverse pure virtual function. | |
Public Member Functions inherited from decl_base | |
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. | |
Public Member Functions inherited from type_or_decl_base | |
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. | |
Public Member Functions inherited from ir_traversable_base | |
Public Member Functions inherited from traversable_base | |
virtual | ~traversable_base () |
Destructor of the traversable_base type. | |
Protected Member Functions | |
virtual decl_base_sptr | add_member_decl (const decl_base_sptr &member) |
Add a member decl to this scope. Note that user code should not use this, but rather use add_decl_to_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. | |
virtual void | remove_member_decl (decl_base_sptr member) |
Remove a declaration from the current scope. | |
Protected Member Functions inherited from decl_base | |
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. | |
Protected Member Functions inherited from type_or_decl_base | |
virtual hash_t | hash_value () const |
Return the hash value of the current IR node. | |
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. | |
Protected Member Functions inherited from traversable_base | |
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. | |
Friends | |
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. | |
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. | |
void | remove_decl_from_scope (decl_base_sptr decl) |
Remove a given decl from its scope. | |
Additional Inherited Members | |
Public Attributes inherited from decl_base | |
priv * | priv_ |
Public Attributes inherited from type_or_decl_base | |
std::unique_ptr< priv > | priv_ |
std::vector<decl_base_sptr > declarations |
std::vector<function_type_sptr > function_types |
Convenience typedef for a vector of function_type_sptr.
std::vector<scope_decl_sptr> scopes |
Convenience typedef for a vector of scope_decl_sptr.
scope_decl | ( | const environment & | env, |
const string & | name, | ||
const location & | locus, | ||
visibility | vis = VISIBILITY_DEFAULT ) |
Constructor of the scope_decl type.
the | environment to use for the new instance. |
the | name of the scope decl. |
locus | the source location where the scope_decl is defined. |
vis | the visibility of the declaration. |
scope_decl | ( | const environment & | env, |
location & | l ) |
Constructor of the scope_decl type.
the | environment to use for the new instance. |
l | the source location where the scope_decl is defined. |
vis | the visibility of the declaration. |
|
virtual |
|
protectedvirtual |
Add a member decl to this scope. Note that user code should not use this, but rather use add_decl_to_scope.
Note that this function updates the qualified name of the member decl that is added. It also sets the scope of the member. Thus, it ABG_ASSERTs that member should not have its scope set, prior to calling this function.
member | the new member decl to add to this scope. |
Reimplemented in class_or_union.
void add_member_type | ( | type_base_sptr | t | ) |
Add a member type to the current instance of class_or_union.
t | the member type to add. It must not have been added to a scope, otherwise this will violate an ABG_ASSERTion. |
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.
t | the type to be added as a member type to the current instance of class_or_union. An instance of class_or_union::member_type will be created out of t and and added to the the class. |
a | the access specifier for the member type to be created. |
bool find_iterator_for_member | ( | const decl_base * | decl, |
declarations::iterator & | i ) |
bool find_iterator_for_member | ( | const decl_base_sptr | decl, |
declarations::iterator & | i ) |
type_base_sptr find_member_type | ( | const string & | name | ) | const |
Find a member type of a given name, inside the current scope_decl.
name | the name of the member type to look for. |
name
, for the current scope. canonical_type_sptr_set_type & get_canonical_types | ( | ) |
const canonical_type_sptr_set_type & get_canonical_types | ( | ) | const |
scope_decl::declarations & get_member_decls | ( | ) |
Getter for the member declarations carried by the current scope_decl.
const scope_decl::declarations & get_member_decls | ( | ) | const |
Getter for the member declarations carried by the current scope_decl.
scope_decl::scopes & get_member_scopes | ( | ) |
const scope_decl::scopes & get_member_scopes | ( | ) | const |
const type_base_sptrs_type & get_member_types | ( | ) | const |
Get the member types of this scope_decl.
|
virtual |
Getter for the number of anonymous classes contained in this scope.
Reimplemented in class_or_union.
|
virtual |
Getter for the number of anonymous enums contained in this scope.
Reimplemented in class_or_union.
|
virtual |
Getter for the number of anonymous unions contained in this scope.
Reimplemented in class_or_union.
const type_base_sptrs_type & get_sorted_canonical_types | ( | ) | const |
Return a vector of sorted canonical types of the current scope.
The types are sorted "almost topologically". That means, they are sorted using the lexicographic order of the string representing the location their definition point. If a type doesn't have a location, then its pretty representation is used.
const scope_decl::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.
|
protected |
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.
Note that this function updates the qualified name of the inserted member.
member | the new member decl to add to this scope. |
before | an interator pointing to the element before which the new member should be inserted. |
void insert_member_type | ( | type_base_sptr | t, |
declarations::iterator | before ) |
Insert a member type.
t | the type to insert in the scope_decl type. |
an | iterator right before which t has to be inserted. |
bool is_empty | ( | ) | const |
|
virtual |
Return true iff both scopes have the same names and have the same member decls.
This function doesn't check for equality of the scopes of its arguments.
Reimplemented from decl_base.
Reimplemented in class_decl, class_or_union, class_tdecl, function_tdecl, namespace_decl, scope_type_decl, and union_decl.
|
protectedvirtual |
Remove a declaration from the current scope.
member | the declaration to remove from the scope. |
Reimplemented in class_or_union.
void remove_member_type | ( | type_base_sptr | t | ) |
Remove a member type from the current class_or_union scope.
t | the type to remove. |
|
virtual |
This implements the ir_traversable_base::traverse pure virtual function.
v | the visitor used on the current instance of scope_decl and on its member nodes. |
Reimplemented from decl_base.
Reimplemented in class_decl, class_or_union, class_tdecl, function_tdecl, namespace_decl, scope_type_decl, and union_decl.
|
friend |
|
friend |
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. |
|
friend |