]> git.draconx.ca Git - gob-dx.git/blob - src/treefuncs.c
Release 1.0.2
[gob-dx.git] / src / treefuncs.c
1 /* Generated by generate_treefuncs.pl from treefuncs.def!
2  * Do not edit by hand! */
3
4 #include <glib.h>
5 #include "treefuncs.h"
6
7 #define COPY_LIST_VALS(list,func) { GList *li; for(li=(list);li;li=li->next) { li->data=func(li->data); } }
8
9 Node * new_argument (char * gtktype, Type * atype, GList * flags, char * name, char * get, int get_line, char * set, int set_line, int line_no)
10 {
11         Argument * self = g_new0(Argument, 1);
12         self->type = ARGUMENT_NODE;
13         self->gtktype = gtktype;
14         self->atype = atype;
15         self->flags = flags;
16         self->name = name;
17         self->get = get;
18         self->get_line = get_line;
19         self->set = set;
20         self->set_line = set_line;
21         self->line_no = line_no;
22         return (Node *)self;
23 }
24
25 Node * new_ccode (int cctype, char * cbuf, int line_no)
26 {
27         CCode * self = g_new0(CCode, 1);
28         self->type = CCODE_NODE;
29         self->cctype = cctype;
30         self->cbuf = cbuf;
31         self->line_no = line_no;
32         return (Node *)self;
33 }
34
35 Node * new_check (int chtype, char * number)
36 {
37         Check * self = g_new0(Check, 1);
38         self->type = CHECK_NODE;
39         self->chtype = chtype;
40         self->number = number;
41         return (Node *)self;
42 }
43
44 Node * new_class (char * otype, char * ptype, char * chunk_size, GList * nodes)
45 {
46         Class * self = g_new0(Class, 1);
47         self->type = CLASS_NODE;
48         self->otype = otype;
49         self->ptype = ptype;
50         self->chunk_size = chunk_size;
51         self->nodes = nodes;
52         return (Node *)self;
53 }
54
55 Node * new_funcarg (Type * atype, char * name, GList * checks)
56 {
57         FuncArg * self = g_new0(FuncArg, 1);
58         self->type = FUNCARG_NODE;
59         self->atype = atype;
60         self->name = name;
61         self->checks = checks;
62         return (Node *)self;
63 }
64
65 Node * new_method (int scope, int method, Type * mtype, char * otype, GList * gtktypes, GList * flags, char * id, GList * args, char * onerror, char * defreturn, char * cbuf, int line_no, int ccode_line, gboolean vararg, int unique_id)
66 {
67         Method * self = g_new0(Method, 1);
68         self->type = METHOD_NODE;
69         self->scope = scope;
70         self->method = method;
71         self->mtype = mtype;
72         self->otype = otype;
73         self->gtktypes = gtktypes;
74         self->flags = flags;
75         self->id = id;
76         self->args = args;
77         self->onerror = onerror;
78         self->defreturn = defreturn;
79         self->cbuf = cbuf;
80         self->line_no = line_no;
81         self->ccode_line = ccode_line;
82         self->vararg = vararg;
83         self->unique_id = unique_id;
84         return (Node *)self;
85 }
86
87 Node * new_type (char * name, char * pointer, char * postfix)
88 {
89         Type * self = g_new0(Type, 1);
90         self->type = TYPE_NODE;
91         self->name = name;
92         self->pointer = pointer;
93         self->postfix = postfix;
94         return (Node *)self;
95 }
96
97 Node * new_variable (int scope, Type * vtype, char * id, int line_no, char * destructor, int destructor_line, gboolean destructor_simple, char * initializer, int initializer_line)
98 {
99         Variable * self = g_new0(Variable, 1);
100         self->type = VARIABLE_NODE;
101         self->scope = scope;
102         self->vtype = vtype;
103         self->id = id;
104         self->line_no = line_no;
105         self->destructor = destructor;
106         self->destructor_line = destructor_line;
107         self->destructor_simple = destructor_simple;
108         self->initializer = initializer;
109         self->initializer_line = initializer_line;
110         return (Node *)self;
111 }
112
113 Argument * copy_argument (Argument * self)
114 {
115         Argument * new;
116         g_return_val_if_fail(self != NULL, NULL);
117         g_return_val_if_fail(self->type == ARGUMENT_NODE, NULL);
118         new = g_new0(Argument, 1);
119         new->type = ARGUMENT_NODE;
120         new->gtktype = g_strdup(self->gtktype);
121         new->atype = copy_type(self->atype);
122         new->flags = g_list_copy(self->flags); COPY_LIST_VALS(new->flags, g_strdup);
123         new->name = g_strdup(self->name);
124         new->get = g_strdup(self->get);
125         new->get_line = self->get_line;
126         new->set = g_strdup(self->set);
127         new->set_line = self->set_line;
128         new->line_no = self->line_no;
129         return new;
130 }
131
132 CCode * copy_ccode (CCode * self)
133 {
134         CCode * new;
135         g_return_val_if_fail(self != NULL, NULL);
136         g_return_val_if_fail(self->type == CCODE_NODE, NULL);
137         new = g_new0(CCode, 1);
138         new->type = CCODE_NODE;
139         new->cctype = self->cctype;
140         new->cbuf = g_strdup(self->cbuf);
141         new->line_no = self->line_no;
142         return new;
143 }
144
145 Check * copy_check (Check * self)
146 {
147         Check * new;
148         g_return_val_if_fail(self != NULL, NULL);
149         g_return_val_if_fail(self->type == CHECK_NODE, NULL);
150         new = g_new0(Check, 1);
151         new->type = CHECK_NODE;
152         new->chtype = self->chtype;
153         new->number = g_strdup(self->number);
154         return new;
155 }
156
157 Class * copy_class (Class * self)
158 {
159         Class * new;
160         g_return_val_if_fail(self != NULL, NULL);
161         g_return_val_if_fail(self->type == CLASS_NODE, NULL);
162         new = g_new0(Class, 1);
163         new->type = CLASS_NODE;
164         new->otype = g_strdup(self->otype);
165         new->ptype = g_strdup(self->ptype);
166         new->chunk_size = g_strdup(self->chunk_size);
167         new->nodes = copy_node_list(self->nodes);
168         return new;
169 }
170
171 FuncArg * copy_funcarg (FuncArg * self)
172 {
173         FuncArg * new;
174         g_return_val_if_fail(self != NULL, NULL);
175         g_return_val_if_fail(self->type == FUNCARG_NODE, NULL);
176         new = g_new0(FuncArg, 1);
177         new->type = FUNCARG_NODE;
178         new->atype = copy_type(self->atype);
179         new->name = g_strdup(self->name);
180         new->checks = copy_node_list(self->checks);
181         return new;
182 }
183
184 Method * copy_method (Method * self)
185 {
186         Method * new;
187         g_return_val_if_fail(self != NULL, NULL);
188         g_return_val_if_fail(self->type == METHOD_NODE, NULL);
189         new = g_new0(Method, 1);
190         new->type = METHOD_NODE;
191         new->scope = self->scope;
192         new->method = self->method;
193         new->mtype = copy_type(self->mtype);
194         new->otype = g_strdup(self->otype);
195         new->gtktypes = g_list_copy(self->gtktypes); COPY_LIST_VALS(new->gtktypes, g_strdup);
196         new->flags = g_list_copy(self->flags); COPY_LIST_VALS(new->flags, g_strdup);
197         new->id = g_strdup(self->id);
198         new->args = copy_node_list(self->args);
199         new->onerror = g_strdup(self->onerror);
200         new->defreturn = g_strdup(self->defreturn);
201         new->cbuf = g_strdup(self->cbuf);
202         new->line_no = self->line_no;
203         new->ccode_line = self->ccode_line;
204         new->vararg = self->vararg;
205         new->unique_id = self->unique_id;
206         return new;
207 }
208
209 Type * copy_type (Type * self)
210 {
211         Type * new;
212         g_return_val_if_fail(self != NULL, NULL);
213         g_return_val_if_fail(self->type == TYPE_NODE, NULL);
214         new = g_new0(Type, 1);
215         new->type = TYPE_NODE;
216         new->name = g_strdup(self->name);
217         new->pointer = g_strdup(self->pointer);
218         new->postfix = g_strdup(self->postfix);
219         return new;
220 }
221
222 Variable * copy_variable (Variable * self)
223 {
224         Variable * new;
225         g_return_val_if_fail(self != NULL, NULL);
226         g_return_val_if_fail(self->type == VARIABLE_NODE, NULL);
227         new = g_new0(Variable, 1);
228         new->type = VARIABLE_NODE;
229         new->scope = self->scope;
230         new->vtype = copy_type(self->vtype);
231         new->id = g_strdup(self->id);
232         new->line_no = self->line_no;
233         new->destructor = g_strdup(self->destructor);
234         new->destructor_line = self->destructor_line;
235         new->destructor_simple = self->destructor_simple;
236         new->initializer = g_strdup(self->initializer);
237         new->initializer_line = self->initializer_line;
238         return new;
239 }
240
241 void free_argument (Argument * self)
242 {
243         g_return_if_fail(self != NULL);
244         g_return_if_fail(self->type == ARGUMENT_NODE);
245         g_free(self->gtktype);
246         free_type(self->atype);
247         g_list_foreach(self->flags, (GFunc)g_free, NULL); g_list_free(self->flags);
248         g_free(self->name);
249         g_free(self->get);
250         g_free(self->set);
251         g_free(self);
252 }
253
254 void free_ccode (CCode * self)
255 {
256         g_return_if_fail(self != NULL);
257         g_return_if_fail(self->type == CCODE_NODE);
258         g_free(self->cbuf);
259         g_free(self);
260 }
261
262 void free_check (Check * self)
263 {
264         g_return_if_fail(self != NULL);
265         g_return_if_fail(self->type == CHECK_NODE);
266         g_free(self->number);
267         g_free(self);
268 }
269
270 void free_class (Class * self)
271 {
272         g_return_if_fail(self != NULL);
273         g_return_if_fail(self->type == CLASS_NODE);
274         g_free(self->otype);
275         g_free(self->ptype);
276         g_free(self->chunk_size);
277         free_node_list(self->nodes);
278         g_free(self);
279 }
280
281 void free_funcarg (FuncArg * self)
282 {
283         g_return_if_fail(self != NULL);
284         g_return_if_fail(self->type == FUNCARG_NODE);
285         free_type(self->atype);
286         g_free(self->name);
287         free_node_list(self->checks);
288         g_free(self);
289 }
290
291 void free_method (Method * self)
292 {
293         g_return_if_fail(self != NULL);
294         g_return_if_fail(self->type == METHOD_NODE);
295         free_type(self->mtype);
296         g_free(self->otype);
297         g_list_foreach(self->gtktypes, (GFunc)g_free, NULL); g_list_free(self->gtktypes);
298         g_list_foreach(self->flags, (GFunc)g_free, NULL); g_list_free(self->flags);
299         g_free(self->id);
300         free_node_list(self->args);
301         g_free(self->onerror);
302         g_free(self->defreturn);
303         g_free(self->cbuf);
304         g_free(self);
305 }
306
307 void free_type (Type * self)
308 {
309         g_return_if_fail(self != NULL);
310         g_return_if_fail(self->type == TYPE_NODE);
311         g_free(self->name);
312         g_free(self->pointer);
313         g_free(self->postfix);
314         g_free(self);
315 }
316
317 void free_variable (Variable * self)
318 {
319         g_return_if_fail(self != NULL);
320         g_return_if_fail(self->type == VARIABLE_NODE);
321         free_type(self->vtype);
322         g_free(self->id);
323         g_free(self->destructor);
324         g_free(self->initializer);
325         g_free(self);
326 }
327
328 Node * copy_node(Node *node)
329 {
330         g_return_val_if_fail(node != NULL, NULL);
331         g_return_val_if_fail(node->type >= 0 && node->type < LAST_NODE_TYPE, NULL);
332         switch(node->type) {
333         case ARGUMENT_NODE: return (Node *)copy_argument ((Argument *)node);
334         case CCODE_NODE: return (Node *)copy_ccode ((CCode *)node);
335         case CHECK_NODE: return (Node *)copy_check ((Check *)node);
336         case CLASS_NODE: return (Node *)copy_class ((Class *)node);
337         case FUNCARG_NODE: return (Node *)copy_funcarg ((FuncArg *)node);
338         case METHOD_NODE: return (Node *)copy_method ((Method *)node);
339         case TYPE_NODE: return (Node *)copy_type ((Type *)node);
340         case VARIABLE_NODE: return (Node *)copy_variable ((Variable *)node);
341         default: return NULL;
342         }
343 }
344
345 void free_node(Node *node)
346 {
347         g_return_if_fail(node != NULL);
348         g_return_if_fail(node->type >= 0 && node->type < LAST_NODE_TYPE);
349         switch(node->type) {
350         case ARGUMENT_NODE: free_argument ((Argument *)node); return;
351         case CCODE_NODE: free_ccode ((CCode *)node); return;
352         case CHECK_NODE: free_check ((Check *)node); return;
353         case CLASS_NODE: free_class ((Class *)node); return;
354         case FUNCARG_NODE: free_funcarg ((FuncArg *)node); return;
355         case METHOD_NODE: free_method ((Method *)node); return;
356         case TYPE_NODE: free_type ((Type *)node); return;
357         case VARIABLE_NODE: free_variable ((Variable *)node); return;
358         default: return;
359         }
360 }
361
362 GList * copy_node_list(GList *nodes)
363 {
364         GList *li;
365         nodes = g_list_copy(nodes);
366         for(li = nodes; li != NULL; li = li->next) {
367                 li->data = copy_node(li->data);
368         }
369         return nodes;
370 }
371
372 void free_node_list(GList *nodes)
373 {
374         GList *li;
375         for(li = nodes; li != NULL; li = li->next) {
376                 free_node(li->data);
377         }
378         g_list_free(nodes);
379 }
380