summaryrefslogtreecommitdiff
path: root/ast_function.cpp
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2010-06-09 17:23:26 -0700
committerIan Romanick <ian.d.romanick@intel.com>2010-06-11 13:51:42 -0700
commitc077131c0f4692b46afb06ab236288a24f2cfa14 (patch)
treefbcdff7f7d73387fbad6f0685849d544e089bd7b /ast_function.cpp
parentd4b33edbd0332addd616a0ba51ce6574c9b83b4f (diff)
Move parameter processing out of match_function_by_name
Eventually code that processes constant structure constructors will need to use the processed list of parameters.
Diffstat (limited to 'ast_function.cpp')
-rw-r--r--ast_function.cpp20
1 files changed, 9 insertions, 11 deletions
diff --git a/ast_function.cpp b/ast_function.cpp
index 07674ada74..889a239c6e 100644
--- a/ast_function.cpp
+++ b/ast_function.cpp
@@ -106,7 +106,7 @@ process_call(exec_list *instructions, ir_function *f,
static ir_rvalue *
match_function_by_name(exec_list *instructions, const char *name,
- YYLTYPE *loc, exec_list *parameters,
+ YYLTYPE *loc, exec_list *actual_parameters,
struct _mesa_glsl_parse_state *state)
{
ir_function *f = state->symbols->get_function(name);
@@ -116,16 +116,10 @@ match_function_by_name(exec_list *instructions, const char *name,
return ir_call::get_error_instruction();
}
- /* Once we've determined that the function being called might exist,
- * process the parameters.
+ /* Once we've determined that the function being called might exist, try
+ * to find an overload of the function that matches the parameters.
*/
- exec_list actual_parameters;
- process_parameters(instructions, &actual_parameters, parameters, state);
-
- /* After processing the function's actual parameters, try to find an
- * overload of the function that matches.
- */
- return process_call(instructions, f, loc, &actual_parameters, state);
+ return process_call(instructions, f, loc, actual_parameters, state);
}
@@ -529,10 +523,14 @@ ast_function_expression::hir(exec_list *instructions,
} else {
const ast_expression *id = subexpressions[0];
YYLTYPE loc = id->get_location();
+ exec_list actual_parameters;
+
+ process_parameters(instructions, &actual_parameters, &this->expressions,
+ state);
return match_function_by_name(instructions,
id->primary_expression.identifier, & loc,
- &this->expressions, state);
+ &actual_parameters, state);
}
return ir_call::get_error_instruction();