From: Kenneth Graunke Date: Wed, 28 Apr 2010 19:44:24 +0000 (-0700) Subject: Factor out parameter list replacement for later reuse. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bff6013d469b3d4e54cdc5731801c56994a523ec;p=mesa.git Factor out parameter list replacement for later reuse. --- diff --git a/ast_to_hir.cpp b/ast_to_hir.cpp index 52e372c7e49..1dc4ea25b21 100644 --- a/ast_to_hir.cpp +++ b/ast_to_hir.cpp @@ -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 8912c00e827..e7e5dee00cb 100644 --- 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(¶meters); +} + + ir_function::ir_function(const char *name) : name(name) { diff --git a/ir.h b/ir.h index 118d97ffa3c..df64e488235 100644 --- 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. *