diff options
author | Ian Romanick <ian.d.romanick@intel.com> | 2010-02-22 13:19:34 -0800 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2010-02-22 13:19:34 -0800 |
commit | a87ac255cf7ef0672b4de865d82e6a40c93b57d8 (patch) | |
tree | fa929815c34a17ca4e258ee3fa3724fe9b10b250 /hir_function.c |
Initial commit. lol
Diffstat (limited to 'hir_function.c')
-rw-r--r-- | hir_function.c | 41 |
1 files changed, 41 insertions, 0 deletions
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. + */ + } +} |