| struct ir_instruction * |
| _mesa_ast_constructor_to_hir(const struct ast_node *n, |
| const struct ast_node *parameters, |
| struct _mesa_glsl_parse_state *state) |
| { |
| const struct ast_type_specifier *type = (struct ast_type_specifier *) n; |
| |
| |
| /* There are effectively three kinds of constructors. Each has its own set |
| * of rules. |
| * |
| * * Built-in scalar, vector, and matrix types: For each of these the only |
| * matching requirement is that the number of values supplied is |
| * sufficient to initialize all of the fields of the type. |
| * * Array types: The number of initializers must match the size of the |
| * array, if a size is specified. Each of the initializers must |
| * exactly match the base type of the array. |
| * * Structure types: These initializers must exactly match the fields of |
| * the structure in order. This is the most restrictive type. |
| * |
| * In all cases the built-in promotions from integer to floating-point types |
| * are applied. |
| */ |
| |
| if (type->is_array) { |
| /* FINISHME */ |
| } else if ((type->type_specifier == ast_struct) |
| || (type->type_specifier == ast_type_name)) { |
| /* FINISHME */ |
| } else { |
| const struct glsl_type *ctor_type; |
| |
| /* Look-up the type, by name, in the symbol table. |
| */ |
| |
| |
| /* Generate a series of assignments of constructor parameters to fields |
| * of the object being initialized. |
| */ |
| } |
| } |