libabigail
|
Abstraction for a function declaration. More...
#include <abg-ir.h>
Classes | |
class | parameter |
Abstraction of a function parameter. More... | |
struct | ptr_equal |
Equality functor for instances of function_decl. More... | |
Public Types | |
typedef shared_ptr< parameter > | parameter_sptr |
Convenience typedef for a shared pointer on a function_decl::parameter. More... | |
typedef std::vector< parameter_sptr > | parameters |
Convenience typedef for a vector of parameter_sptr. More... | |
![]() | |
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 | |
function_decl (const string &name, function_type_sptr function_type, bool declared_inline, const location &locus, const string &mangled_name, visibility vis, binding bind) | |
Constructor of the function_decl. More... | |
function_decl (const string &name, type_base_sptr fn_type, bool declared_inline, const location &locus, const string &mangled_name="", visibility vis=VISIBILITY_DEFAULT, binding bind=BINDING_GLOBAL) | |
Constructor of the function_decl type. More... | |
virtual | ~function_decl () |
Destructor of the function_decl type. More... | |
void | append_parameter (parameter_sptr parm) |
Append a parameter to the type of this function. More... | |
void | append_parameters (std::vector< parameter_sptr > &parms) |
Append a vector of parameters to the type of this function. More... | |
function_decl_sptr | clone () const |
Create a new instance of function_decl that is a clone of the current one. More... | |
binding | get_binding () const |
parameters::const_iterator | get_first_non_implicit_parm () const |
Getter for the first non-implicit parameter of a function decl. More... | |
interned_string | get_id () const |
Return an ID that tries to uniquely identify the function inside a program or a library. More... | |
const function_type * | get_naked_type () const |
Fast getter of the type of the current instance of function_decl. More... | |
const std::vector< parameter_sptr > & | get_parameters () const |
virtual string | get_pretty_representation (bool internal=false, bool qualified_name=true) const |
Get the pretty representation of the current instance of function_decl. More... | |
string | get_pretty_representation_of_declarator (bool internal=false) const |
Compute and return the pretty representation for the part of the function declaration that starts at the declarator. That is, the return type and the other specifiers of the beginning of the function's declaration ar omitted. More... | |
const type_base_sptr | get_return_type () const |
const elf_symbol_sptr & | get_symbol () const |
Gets the the underlying ELF symbol for the current variable, that was set using function_decl::set_symbol(). Please read the documentation for that member function for more information about "underlying ELF symbols". More... | |
const function_type_sptr | get_type () const |
Return the type of the current instance of function_decl. More... | |
bool | is_declared_inline () const |
Test if the function was declared inline. More... | |
void | is_declared_inline (bool) |
Set the property of the function being declared inline. More... | |
bool | is_variadic () const |
Return true iff the function takes a variable number of parameters. More... | |
virtual bool | operator== (const decl_base &o) const |
Comparison operator for function_decl. More... | |
void | set_symbol (const elf_symbol_sptr &sym) |
This sets the underlying ELF symbol for the current function decl. More... | |
void | set_type (const function_type_sptr &fn_type) |
virtual bool | traverse (ir_node_visitor &) |
This implements the ir_traversable_base::traverse pure virtual function. More... | |
![]() | |
decl_base (const environment &, const location &) | |
Constructor for the decl_base type. More... | |
decl_base (const environment &e, const interned_string &name, const location &locus, const interned_string &mangled_name=interned_string(), visibility vis=VISIBILITY_DEFAULT) | |
Constructor. More... | |
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. More... | |
virtual | ~decl_base () |
Destructor of the decl_base type. More... | |
const interned_string & | get_cached_pretty_representation (bool internal=false) const |
Get the pretty representation of the current decl. More... | |
context_rel * | get_context_rel () |
Getter for the context relationship. More... | |
const context_rel * | get_context_rel () const |
Getter for the context relationship. More... | |
const decl_base_sptr | get_definition_of_declaration () const |
If this decl_base is declaration-only, get its definition, if any. More... | |
const decl_base_sptr | get_earlier_declaration () const |
If this decl_base is a definition, get its earlier declaration. More... | |
bool | get_has_anonymous_parent () const |
Get the "has_anonymous_parent" flag of the current declaration. More... | |
bool | get_is_anonymous () const |
Test if the current declaration is anonymous. More... | |
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. More... | |
bool | get_is_in_public_symbol_table () const |
Test if the decl is defined in a ELF symbol table as a public symbol. More... | |
const interned_string & | get_linkage_name () const |
Getter for the mangled name. More... | |
const location & | get_location () const |
Get the location of a given declaration. More... | |
const decl_base * | get_naked_definition_of_declaration () const |
If this decl_base is declaration-only, get its definition, if any. More... | |
virtual const interned_string & | get_name () const |
Getter for the name of the current decl. More... | |
typedef_decl_sptr | get_naming_typedef () const |
Getter for the naming typedef of the current decl. More... | |
virtual string | get_pretty_representation (bool internal=false, bool qualified_name=true) const |
Get the pretty representatin of the current declaration. More... | |
virtual const interned_string & | get_qualified_name (bool internal=false) const |
Return the qualified name of the decl. More... | |
virtual void | get_qualified_name (interned_string &qualified_name, bool internal=false) const |
Compute the qualified name of the decl. More... | |
const interned_string & | get_qualified_parent_name () const |
Return a copy of the qualified name of the parent of the current decl. More... | |
scope_decl * | get_scope () const |
Return the type containing the current decl, if any. More... | |
virtual const interned_string & | get_scoped_name () const |
Return the scoped name of the decl. More... | |
visibility | get_visibility () const |
Getter for the visibility of the decl. More... | |
virtual bool | operator!= (const decl_base &) const |
Inequality operator. More... | |
virtual bool | operator== (const decl_base &) const |
Return true iff the two decls have the same name. More... | |
void | set_definition_of_declaration (const decl_base_sptr &) |
Set the definition of this declaration-only decl_base. More... | |
void | set_earlier_declaration (const decl_base_sptr &) |
set the earlier declaration of this decl_base definition. More... | |
void | set_is_anonymous (bool) |
Set the "is_anonymous" flag of the current declaration. More... | |
void | set_is_declaration_only (bool f) |
Set a flag saying if the enum_type_decl is a declaration-only enum_type_decl. More... | |
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). More... | |
virtual void | set_linkage_name (const string &m) |
Setter for the linkage name. More... | |
void | set_location (const location &l) |
Set the location for a given declaration. More... | |
virtual void | set_name (const string &n) |
Setter for the name of the decl. More... | |
void | set_naming_typedef (const typedef_decl_sptr &) |
Set the naming typedef of the current instance of decl_base. More... | |
virtual void | set_scope (scope_decl *) |
Setter of the scope of the current decl. More... | |
void | set_visibility (visibility v) |
Setter for the visibility of the decl. More... | |
virtual bool | traverse (ir_node_visitor &v) |
This implements the ir_traversable_base::traverse pure virtual function. More... | |
![]() | |
type_or_decl_base (const environment &, enum type_or_decl_kind k=ABSTRACT_TYPE_OR_DECL) | |
Constructor of type_or_decl_base. More... | |
virtual | ~type_or_decl_base () |
The destructor of the type_or_decl_base type. More... | |
location & | get_artificial_location () const |
Getter of the artificial location of the artifact. More... | |
corpus * | get_corpus () |
Get the corpus this ABI artifact belongs to. More... | |
const corpus * | get_corpus () const |
Get the corpus this ABI artifact belongs to. More... | |
const environment & | get_environment () const |
Getter of the environment of the current ABI artifact. More... | |
bool | get_is_artificial () const |
Getter of the flag that says if the artefact is artificial. More... | |
virtual string | get_pretty_representation (bool internal=false, bool qualified_name=true) const =0 |
translation_unit * | get_translation_unit () |
Get the translation_unit this ABI artifact belongs to. More... | |
const translation_unit * | get_translation_unit () const |
Get the translation_unit this ABI artifact belongs to. More... | |
bool | has_artificial_location () const |
Test if the current ABI artifact carries an artificial location. More... | |
enum type_or_decl_kind | kind () const |
Getter for the "kind" property of type_or_decl_base type. More... | |
void | set_artificial_location (const location &) |
Setter of the artificial location of the artificat. More... | |
void | set_is_artificial (bool) |
Setter of the flag that says if the artefact is artificial. More... | |
void | set_translation_unit (translation_unit *) |
Set the translation_unit this ABI artifact belongs to. More... | |
virtual bool | traverse (ir_node_visitor &) |
Traverse the the ABI artifact. More... | |
virtual bool | traverse (ir_node_visitor &v) |
Traverse a given IR node and its children, calling an visitor on each node. More... | |
![]() | |
virtual | ~traversable_base () |
Destructor of the traversable_base type. More... | |
Additional Inherited Members | |
![]() | |
priv * | priv_ |
![]() | |
std::unique_ptr< priv > | priv_ |
![]() | |
decl_base (const decl_base &) | |
void | clear_qualified_name () |
Clear the qualified name of this decl. More... | |
const interned_string & | peek_qualified_name () const |
Getter for the qualified name. More... | |
const interned_string & | peek_temporary_qualified_name () const |
Getter of the temporary qualified name of the current declaration. More... | |
void | set_context_rel (context_rel *c) |
void | set_qualified_name (const interned_string &) const |
Setter for the qualified name. More... | |
void | set_temporary_qualified_name (const interned_string &) const |
Setter for the temporary qualified name of the current declaration. More... | |
![]() | |
virtual hash_t | hash_value () const |
Return the hash value of the current IR node. More... | |
void | kind (enum type_or_decl_kind) |
Setter for the "kind" property of type_or_decl_base type. More... | |
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. More... | |
const void * | runtime_type_instance () const |
Getter of the pointer to the runtime type sub-object of the current instance. More... | |
void | runtime_type_instance (void *) |
Setter of the pointer to the runtime type sub-object of the current instance. More... | |
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. More... | |
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. More... | |
![]() | |
traversable_base () | |
Default constructor of the traversable_base type. More... | |
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. More... | |
void | visiting (bool f) |
The traversing code should be responsible of calling this, not the user code. More... | |
typedef shared_ptr<parameter> parameter_sptr |
Convenience typedef for a shared pointer on a function_decl::parameter.
typedef std::vector<parameter_sptr> parameters |
Convenience typedef for a vector of parameter_sptr.
function_decl | ( | const string & | name, |
function_type_sptr | function_type, | ||
bool | declared_inline, | ||
const location & | locus, | ||
const string & | mangled_name, | ||
visibility | vis, | ||
binding | bind | ||
) |
Constructor of the function_decl.
name | the name of the function. |
function_type | the type of the function. |
declared_inline | wether the function is declared inline. |
locus | the source location of the function. |
mangled_name | the linkage name of the function. |
vis | the visibility of the function. |
bind | the binding of the function. |
function_decl | ( | const string & | name, |
type_base_sptr | fn_type, | ||
bool | declared_inline, | ||
const location & | locus, | ||
const string & | linkage_name = "" , |
||
visibility | vis = VISIBILITY_DEFAULT , |
||
binding | bind = BINDING_GLOBAL |
||
) |
Constructor of the function_decl type.
This flavour of constructor is for when the pointer to the instance of function_type that the client code has is presented as a pointer to type_base. In that case, this constructor saves the client code from doing a dynamic_cast to get the function_type pointer.
name | the name of the function declaration. |
fn_type | the type of the function declaration. The dynamic type of this parameter should be 'pointer to function_type' |
declared_inline | whether this function was declared inline |
locus | the source location of the function declaration. |
linkage_name | the mangled name of the function declaration. |
vis | the visibility of the function declaration. |
bind | the kind of the binding of the function declaration. |
|
virtual |
Destructor of the function_decl type.
void append_parameter | ( | parameter_sptr | parm | ) |
void append_parameters | ( | std::vector< parameter_sptr > & | parms | ) |
function_decl_sptr clone | ( | ) | const |
Create a new instance of function_decl that is a clone of the current one.
decl_base::binding get_binding | ( | ) | const |
function_decl::parameters::const_iterator get_first_non_implicit_parm | ( | ) | const |
interned_string get_id | ( | ) | const |
Return an ID that tries to uniquely identify the function inside a program or a library.
So if the function has an underlying elf symbol, the ID is the concatenation of the symbol name and its version. Otherwise, the ID is the linkage name if its non-null. Otherwise, it's the pretty representation of the function.
const function_type * get_naked_type | ( | ) | const |
Fast getter of the type of the current instance of function_decl.
Note that this function returns the underlying pointer managed by the smart pointer returned by function_decl::get_type(). It's faster than function_decl::get_type(). This getter is to be used in code paths that are proven to be performance hot spots; especially (for instance) when comparing function types. Those are compared extremely frequently when libabigail is used to handle huge binaries with a lot of functions.
const std::vector< shared_ptr< function_decl::parameter > > & get_parameters | ( | ) | const |
|
virtual |
Get the pretty representation of the current instance of function_decl.
internal | set to true if the call is intended to get a representation of the decl (or type) for the purpose of canonical type comparison. This is mainly used in the function type_base::get_canonical_type_for(). |
In other words if the argument for this parameter is true then the call is meant for 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.
Reimplemented from decl_base.
string get_pretty_representation_of_declarator | ( | bool | internal = false | ) | const |
Compute and return the pretty representation for the part of the function declaration that starts at the declarator. That is, the return type and the other specifiers of the beginning of the function's declaration ar omitted.
internal | set to true if the call is intended to get a representation of the decl (or type) for the purpose of canonical type comparison. This is mainly used in the function type_base::get_canonical_type_for(). |
In other words if the argument for this parameter is true then the call is meant for 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 shared_ptr< type_base > get_return_type | ( | ) | const |
const elf_symbol_sptr & get_symbol | ( | ) | const |
Gets the the underlying ELF symbol for the current variable, that was set using function_decl::set_symbol(). Please read the documentation for that member function for more information about "underlying ELF symbols".
const shared_ptr< function_type > get_type | ( | ) | const |
Return the type of the current instance of function_decl.
It's either a function_type or method_type.
bool is_declared_inline | ( | ) | const |
void is_declared_inline | ( | bool | value | ) |
bool is_variadic | ( | ) | const |
|
virtual |
Comparison operator for function_decl.
other | the other instance of function_decl to compare against. |
other
. Reimplemented from decl_base.
void set_symbol | ( | const elf_symbol_sptr & | sym | ) |
This sets the underlying ELF symbol for the current function decl.
And underlyin$g ELF symbol for the current function decl might exist only if the corpus that this function decl originates from was constructed from an ELF binary file.
Note that comparing two function decls that have underlying ELF symbols involves comparing their underlying elf symbols. The decl name for the function thus becomes irrelevant in the comparison.
sym | the new ELF symbol for this function decl. |
void set_type | ( | const function_type_sptr & | fn_type | ) |
|
virtual |
This implements the ir_traversable_base::traverse pure virtual function.
v | the visitor used on the current instance. |
Reimplemented from decl_base.