Require that function formal parameters have names
authorIan Romanick <ian.d.romanick@intel.com>
Fri, 2 Apr 2010 22:09:33 +0000 (15:09 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Fri, 2 Apr 2010 22:09:33 +0000 (15:09 -0700)
ast.h
ast_to_hir.cpp

diff --git a/ast.h b/ast.h
index 0dfd02a9cd1a3bb24204e89363e3998535f83153..37df4a0e0865e43819e6f8f8ad09bfdd22f9b708 100644 (file)
--- a/ast.h
+++ b/ast.h
@@ -432,6 +432,14 @@ public:
    char *identifier;
    int is_array;
    ast_expression *array_size;
+
+   static void parameters_to_hir(simple_node *ast_parameters,
+                                bool formal, exec_list *ir_parameters,
+                                struct _mesa_glsl_parse_state *state);
+
+private:
+   /** Is this parameter declaration part of a formal parameter list? */
+   bool formal_parameter;
 };
 
 
index dd846740042c6660f406ef9fafe804ef8cddb3d1..3fddd5f19619dcbf623f33145ca9307a204c534b 100644 (file)
@@ -1628,6 +1628,11 @@ ast_parameter_declarator::hir(exec_list *instructions,
    if (type->is_void() && (this->identifier == NULL))
       return NULL;
 
+   if (formal_parameter && (this->identifier == NULL)) {
+      _mesa_glsl_error(& loc, state, "formal parameter lacks a name");
+      return NULL;
+   }
+
    ir_variable *var = new ir_variable(type, this->identifier);
 
    /* FINISHME: Handle array declarations.  Note that this requires
@@ -1649,17 +1654,18 @@ ast_parameter_declarator::hir(exec_list *instructions,
 }
 
 
-static void
-ast_function_parameters_to_hir(struct simple_node *ast_parameters,
-                              exec_list *ir_parameters,
-                              struct _mesa_glsl_parse_state *state)
+void
+ast_parameter_declarator::parameters_to_hir(struct simple_node *ast_parameters,
+                                           bool formal,
+                                           exec_list *ir_parameters,
+                                           _mesa_glsl_parse_state *state)
 {
    struct simple_node *ptr;
 
    foreach (ptr, ast_parameters) {
-      ast_node *param = (ast_node *)ptr;
+      ast_parameter_declarator *param = (ast_parameter_declarator *)ptr;
+      param->formal_parameter = formal;
       param->hir(ir_parameters, state);
-
    }
 }
 
@@ -1713,7 +1719,9 @@ ast_function::hir(exec_list *instructions,
     * used below to compare this function's signature with previously seen
     * signatures for functions with the same name.
     */
-   ast_function_parameters_to_hir(& this->parameters, & hir_parameters, state);
+   ast_parameter_declarator::parameters_to_hir(& this->parameters,
+                                              is_definition,
+                                              & hir_parameters, state);
 
    const char *return_type_name;
    const glsl_type *return_type =