From a87ac255cf7ef0672b4de865d82e6a40c93b57d8 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Mon, 22 Feb 2010 13:19:34 -0800 Subject: Initial commit. lol --- hir_function.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 hir_function.c (limited to 'hir_function.c') diff --git a/hir_function.c b/hir_function.c new file mode 100644 index 0000000000..eac2b59a61 --- /dev/null +++ b/hir_function.c @@ -0,0 +1,41 @@ +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. + */ + } +} -- cgit v1.2.3