ir_function_signature: Add method to get the function owning a signature
authorIan Romanick <ian.d.romanick@intel.com>
Fri, 2 Jul 2010 20:28:32 +0000 (13:28 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Mon, 12 Jul 2010 22:19:29 +0000 (15:19 -0700)
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.

src/glsl/ir.cpp
src/glsl/ir.h

index f3ee12ce81f32c3004004c61edadf8dcb9a43c6c..6d8991328617335b3c4b25cd9c0a928eb02018fb 100644 (file)
@@ -771,7 +771,7 @@ ir_variable::component_slots() const
 
 
 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 */
 }
index 18294ebc314678a10b52af71c0fa5315270996bd..fb94b5a560d645cdfeaf36843ad2739b53c1ef14 100644 (file)
@@ -275,6 +275,23 @@ public:
     */
    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
     * and the supplied parameter list.  If not, returns the name of the first
@@ -312,7 +329,7 @@ public:
 
 private:
    /** Function of which this signature is one overload. */
-   class ir_function *function;
+   class ir_function *_function;
 
    friend class ir_function;
 };
@@ -343,8 +360,8 @@ public:
 
    void add_signature(ir_function_signature *sig)
    {
-      sig->function = this;
-      signatures.push_tail(sig);
+      sig->_function = this;
+      this->signatures.push_tail(sig);
    }
 
    /**
@@ -381,7 +398,7 @@ private:
 
 inline const char *ir_function_signature::function_name() const
 {
-   return function->name;
+   return this->_function->name;
 }
 /*@}*/