Factor out parameter list replacement for later reuse.
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 28 Apr 2010 19:44:24 +0000 (12:44 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Wed, 28 Apr 2010 22:34:52 +0000 (15:34 -0700)
ast_to_hir.cpp
ir.cpp
ir.h

index 52e372c7e493eab128922eac12b93b352a1d8e33..1dc4ea25b21091ebe51a8f471d2ad7b2371ad6ba 100644 (file)
@@ -1973,20 +1973,9 @@ ast_function::hir(exec_list *instructions,
    if (sig == NULL) {
       sig = new ir_function_signature(return_type);
       f->add_signature(sig);
-   } else if (is_definition) {
-      /* Destroy all of the previous parameter information.  The previous
-       * parameter information comes from the function prototype, and it can
-       * either include invalid parameter names or may not have names at all.
-       */
-      foreach_iter(exec_list_iterator, iter, sig->parameters) {
-        assert(((ir_instruction *) iter.get())->as_variable() != NULL);
-
-        iter.remove();
-        delete iter.get();
-      }
    }
 
-   hir_parameters.move_nodes_to(& sig->parameters);
+   sig->replace_parameters(&hir_parameters);
    signature = sig;
 
    /* Function declarations (prototypes) do not have r-values.
diff --git a/ir.cpp b/ir.cpp
index 8912c00e8271d9bf5fc2677c5d3d4497127bac9c..e7e5dee00cb8699dee63f5084f77d6609ab3919b 100644 (file)
--- a/ir.cpp
+++ b/ir.cpp
@@ -364,6 +364,24 @@ ir_function_signature::qualifiers_match(exec_list *params)
 }
 
 
+void
+ir_function_signature::replace_parameters(exec_list *new_params)
+{
+   /* Destroy all of the previous parameter information.  If the previous
+    * parameter information comes from the function prototype, it may either
+    * specify incorrect parameter names or not have names at all.
+    */
+   foreach_iter(exec_list_iterator, iter, parameters) {
+      assert(((ir_instruction *) iter.get())->as_variable() != NULL);
+
+      iter.remove();
+      delete (ir_instruction*) iter.get();
+   }
+
+   new_params->move_nodes_to(&parameters);
+}
+
+
 ir_function::ir_function(const char *name)
    : name(name)
 {
diff --git a/ir.h b/ir.h
index 118d97ffa3cbfb50be6291e1789b1efa37f44ca3..df64e48823595990e97074d078e61e5c71f26bed 100644 (file)
--- a/ir.h
+++ b/ir.h
@@ -213,6 +213,13 @@ public:
     */
    const char *qualifiers_match(exec_list *params);
 
+   /**
+    * Replace the current parameter list with the given one.  This is useful
+    * if the current information came from a prototype, and either has invalid
+    * or missing parameter names.
+    */
+   void replace_parameters(exec_list *new_params);
+
    /**
     * Function return type.
     *