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.
This commit is contained in:
Ian Romanick 2010-06-09 17:23:26 -07:00
parent d4b33edbd0
commit c077131c0f
1 changed files with 9 additions and 11 deletions

View File

@ -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();