31
31
#include "imports.h"
32
32
#include "slang_compile.h"
36
int slang_operation_construct (slang_operation *oper)
38
oper->type = slang_oper_none;
39
oper->children = NULL;
40
oper->num_children = 0;
41
oper->literal = (float) 0;
42
oper->a_id = SLANG_ATOM_NULL;
43
oper->locals = (slang_variable_scope *) slang_alloc_malloc (sizeof (slang_variable_scope));
44
if (oper->locals == NULL)
46
_slang_variable_scope_ctr (oper->locals);
50
void slang_operation_destruct (slang_operation *oper)
54
for (i = 0; i < oper->num_children; i++)
55
slang_operation_destruct (oper->children + i);
56
slang_alloc_free (oper->children);
57
slang_variable_scope_destruct (oper->locals);
58
slang_alloc_free (oper->locals);
61
int slang_operation_copy (slang_operation *x, const slang_operation *y)
66
if (!slang_operation_construct (&z))
69
z.children = (slang_operation *) slang_alloc_malloc (y->num_children * sizeof (slang_operation));
70
if (z.children == NULL)
72
slang_operation_destruct (&z);
75
for (z.num_children = 0; z.num_children < y->num_children; z.num_children++)
76
if (!slang_operation_construct (&z.children[z.num_children]))
78
slang_operation_destruct (&z);
81
for (i = 0; i < z.num_children; i++)
82
if (!slang_operation_copy (&z.children[i], &y->children[i]))
84
slang_operation_destruct (&z);
87
z.literal = y->literal;
89
if (!slang_variable_scope_copy (z.locals, y->locals))
91
slang_operation_destruct (&z);
94
slang_operation_destruct (x);
36
* Init a slang_operation object
39
slang_operation_construct(slang_operation * oper)
41
oper->type = slang_oper_none;
42
oper->children = NULL;
43
oper->num_children = 0;
44
oper->literal = (float) 0;
45
oper->a_id = SLANG_ATOM_NULL;
47
(slang_variable_scope *)
48
slang_alloc_malloc(sizeof(slang_variable_scope));
49
if (oper->locals == NULL)
51
_slang_variable_scope_ctr(oper->locals);
56
slang_operation_destruct(slang_operation * oper)
60
for (i = 0; i < oper->num_children; i++)
61
slang_operation_destruct(oper->children + i);
62
slang_alloc_free(oper->children);
63
slang_variable_scope_destruct(oper->locals);
64
slang_alloc_free(oper->locals);
68
* Recursively copy a slang_operation node.
69
* \return GL_TRUE for success, GL_FALSE if failure
72
slang_operation_copy(slang_operation * x, const slang_operation * y)
77
if (!slang_operation_construct(&z))
80
z.children = (slang_operation *)
81
slang_alloc_malloc(y->num_children * sizeof(slang_operation));
82
if (z.children == NULL) {
83
slang_operation_destruct(&z);
86
for (z.num_children = 0; z.num_children < y->num_children;
88
if (!slang_operation_construct(&z.children[z.num_children])) {
89
slang_operation_destruct(&z);
93
for (i = 0; i < z.num_children; i++) {
94
if (!slang_operation_copy(&z.children[i], &y->children[i])) {
95
slang_operation_destruct(&z);
99
z.literal = y->literal;
101
if (!slang_variable_scope_copy(z.locals, y->locals)) {
102
slang_operation_destruct(&z);
105
slang_operation_destruct(x);
112
slang_operation_new(GLuint count)
114
return (slang_operation *) _mesa_calloc(count * sizeof(slang_operation));