ir_function_signature: Add method to get the function owning a signature
There is no setter function, the getter returns a constant pointer, and ir_function_signature::_function is private for a reason. The only way to make a connection between a function and function signature is via ir_function::add_signature. This helps ensure that certain invariants (i.e., a function signature is in the list of signatures for its _function) are met.
This commit is contained in:
@@ -771,7 +771,7 @@ ir_variable::component_slots() const
|
|||||||
|
|
||||||
|
|
||||||
ir_function_signature::ir_function_signature(const glsl_type *return_type)
|
ir_function_signature::ir_function_signature(const glsl_type *return_type)
|
||||||
: return_type(return_type), is_defined(false)
|
: return_type(return_type), is_defined(false), _function(NULL)
|
||||||
{
|
{
|
||||||
/* empty */
|
/* empty */
|
||||||
}
|
}
|
||||||
|
@@ -275,6 +275,23 @@ public:
|
|||||||
*/
|
*/
|
||||||
const char *function_name() const;
|
const char *function_name() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a handle to the function for which this is a signature
|
||||||
|
*
|
||||||
|
* There is no setter function, this function returns a \c const pointer,
|
||||||
|
* and \c ir_function_signature::_function is private for a reason. The
|
||||||
|
* only way to make a connection between a function and function signature
|
||||||
|
* is via \c ir_function::add_signature. This helps ensure that certain
|
||||||
|
* invariants (i.e., a function signature is in the list of signatures for
|
||||||
|
* its \c _function) are met.
|
||||||
|
*
|
||||||
|
* \sa ir_function::add_signature
|
||||||
|
*/
|
||||||
|
inline const class ir_function *function() const
|
||||||
|
{
|
||||||
|
return this->_function;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check whether the qualifiers match between this signature's parameters
|
* Check whether the qualifiers match between this signature's parameters
|
||||||
* and the supplied parameter list. If not, returns the name of the first
|
* and the supplied parameter list. If not, returns the name of the first
|
||||||
@@ -312,7 +329,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
/** Function of which this signature is one overload. */
|
/** Function of which this signature is one overload. */
|
||||||
class ir_function *function;
|
class ir_function *_function;
|
||||||
|
|
||||||
friend class ir_function;
|
friend class ir_function;
|
||||||
};
|
};
|
||||||
@@ -343,8 +360,8 @@ public:
|
|||||||
|
|
||||||
void add_signature(ir_function_signature *sig)
|
void add_signature(ir_function_signature *sig)
|
||||||
{
|
{
|
||||||
sig->function = this;
|
sig->_function = this;
|
||||||
signatures.push_tail(sig);
|
this->signatures.push_tail(sig);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -381,7 +398,7 @@ private:
|
|||||||
|
|
||||||
inline const char *ir_function_signature::function_name() const
|
inline const char *ir_function_signature::function_name() const
|
||||||
{
|
{
|
||||||
return function->name;
|
return this->_function->name;
|
||||||
}
|
}
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user