blob: eac2b59a6118a0e3b30eb08a9925d6c5e56afccb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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.
*/
}
}
|