summaryrefslogtreecommitdiff
path: root/ast_to_hir.cpp
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2010-03-15 13:04:13 -0700
committerIan Romanick <ian.d.romanick@intel.com>2010-03-15 13:04:13 -0700
commit548fa293a37db8f01bd35d2dc878720e75886aa4 (patch)
treec01a1410404ed739bd3eaf6f47954f1b7a584f3c /ast_to_hir.cpp
parent728330e3b27e56206422d61a4ece87cdfb563817 (diff)
Move ast_function_expression::hir to ast_function.cpp
Diffstat (limited to 'ast_to_hir.cpp')
-rw-r--r--ast_to_hir.cpp81
1 files changed, 0 insertions, 81 deletions
diff --git a/ast_to_hir.cpp b/ast_to_hir.cpp
index d24dc159f2..1de64795ad 100644
--- a/ast_to_hir.cpp
+++ b/ast_to_hir.cpp
@@ -711,87 +711,6 @@ ast_expression::hir(exec_list *instructions,
ir_instruction *
-ast_function_expression::hir(exec_list *instructions,
- struct _mesa_glsl_parse_state *state)
-{
- /* There are three sorts of function calls.
- *
- * 1. contstructors - The first subexpression is an ast_type_specifier.
- * 2. methods - Only the .length() method of array types.
- * 3. functions - Calls to regular old functions.
- *
- * There are two kinds of constructor call. Constructors for built-in
- * language types, such as mat4 and vec2, are free form. The only
- * requirement is that the parameters must provide enough values of the
- * correct scalar type. Constructors for arrays and structures must have
- * the exact number of parameters with matching types in the correct order.
- * These constructors follow essentially the same type matching rules as
- * functions.
- *
- * Method calls are actually detected when the ast_field_selection
- * expression is handled.
- */
- if (is_constructor()) {
- return ir_call::get_error_instruction();
- } else {
- const ast_expression *id = subexpressions[0];
-
- ir_function *f = (ir_function *)
- _mesa_symbol_table_find_symbol(state->symbols, 0,
- id->primary_expression.identifier);
-
- if (f == NULL) {
- YYLTYPE loc = id->get_location();
-
- _mesa_glsl_error(& loc, state, "function `%s' undeclared",
- id->primary_expression.identifier);
- return ir_call::get_error_instruction();
- }
-
- /* Once we've determined that the function being called might exist,
- * process the parameters.
- */
- exec_list actual_parameters;
- simple_node *const first = subexpressions[1];
- if (first != NULL) {
- simple_node *ptr = first;
- do {
- ir_instruction *const result =
- ((ast_node *) ptr)->hir(instructions, state);
- ptr = ptr->next;
-
- actual_parameters.push_tail(result);
- } while (ptr != first);
- }
-
- /* After processing the function's actual parameters, try to find an
- * overload of the function that matches.
- */
- const ir_function_signature *sig =
- f->matching_signature(& actual_parameters);
- if (sig != NULL) {
- /* FINISHME: The list of actual parameters needs to be modified to
- * FINISHME: include any necessary conversions.
- */
- return new ir_call(sig, & actual_parameters);
- } else {
- YYLTYPE loc = id->get_location();
-
- /* FINISHME: Log a better error message here. G++ will show the types
- * FINISHME: of the actual parameters and the set of candidate
- * FINISHME: functions. A different error should also be logged when
- * FINISHME: multiple functions match.
- */
- _mesa_glsl_error(& loc, state, "no matching function for call to `%s'",
- id->primary_expression.identifier);
- return ir_call::get_error_instruction();
- }
- }
-
- return ir_call::get_error_instruction();
-}
-
-ir_instruction *
ast_expression_statement::hir(exec_list *instructions,
struct _mesa_glsl_parse_state *state)
{