diff options
author | Ian Romanick <ian.d.romanick@intel.com> | 2010-06-09 17:23:26 -0700 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2010-06-11 13:51:42 -0700 |
commit | c077131c0f4692b46afb06ab236288a24f2cfa14 (patch) | |
tree | fbcdff7f7d73387fbad6f0685849d544e089bd7b /ast_function.cpp | |
parent | d4b33edbd0332addd616a0ba51ce6574c9b83b4f (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.cpp | 20 |
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(); |