1 /* Generated by generate_treefuncs.pl from treefuncs.def!
2 * Do not edit by hand! */
7 #define COPY_LIST_VALS(list,func) { GList *li; for(li=(list);li;li=li->next) { li->data=func(li->data); } }
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)
11 Argument * self = g_new0(Argument, 1);
12 self->type = ARGUMENT_NODE;
13 self->gtktype = gtktype;
18 self->get_line = get_line;
20 self->set_line = set_line;
21 self->line_no = line_no;
25 Node * new_ccode (int cctype, char * cbuf, int line_no)
27 CCode * self = g_new0(CCode, 1);
28 self->type = CCODE_NODE;
29 self->cctype = cctype;
31 self->line_no = line_no;
35 Node * new_check (int chtype, char * number)
37 Check * self = g_new0(Check, 1);
38 self->type = CHECK_NODE;
39 self->chtype = chtype;
40 self->number = number;
44 Node * new_class (char * otype, char * ptype, char * chunk_size, GList * nodes)
46 Class * self = g_new0(Class, 1);
47 self->type = CLASS_NODE;
50 self->chunk_size = chunk_size;
55 Node * new_funcarg (Type * atype, char * name, GList * checks)
57 FuncArg * self = g_new0(FuncArg, 1);
58 self->type = FUNCARG_NODE;
61 self->checks = checks;
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)
67 Method * self = g_new0(Method, 1);
68 self->type = METHOD_NODE;
70 self->method = method;
73 self->gtktypes = gtktypes;
77 self->onerror = onerror;
78 self->defreturn = defreturn;
80 self->line_no = line_no;
81 self->ccode_line = ccode_line;
82 self->vararg = vararg;
83 self->unique_id = unique_id;
87 Node * new_type (char * name, char * pointer, char * postfix)
89 Type * self = g_new0(Type, 1);
90 self->type = TYPE_NODE;
92 self->pointer = pointer;
93 self->postfix = postfix;
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)
99 Variable * self = g_new0(Variable, 1);
100 self->type = VARIABLE_NODE;
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;
113 Argument * copy_argument (Argument * self)
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;
132 CCode * copy_ccode (CCode * self)
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;
145 Check * copy_check (Check * self)
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);
157 Class * copy_class (Class * self)
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);
171 FuncArg * copy_funcarg (FuncArg * self)
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);
184 Method * copy_method (Method * self)
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;
209 Type * copy_type (Type * self)
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);
222 Variable * copy_variable (Variable * self)
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;
241 void free_argument (Argument * self)
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);
254 void free_ccode (CCode * self)
256 g_return_if_fail(self != NULL);
257 g_return_if_fail(self->type == CCODE_NODE);
262 void free_check (Check * self)
264 g_return_if_fail(self != NULL);
265 g_return_if_fail(self->type == CHECK_NODE);
266 g_free(self->number);
270 void free_class (Class * self)
272 g_return_if_fail(self != NULL);
273 g_return_if_fail(self->type == CLASS_NODE);
276 g_free(self->chunk_size);
277 free_node_list(self->nodes);
281 void free_funcarg (FuncArg * self)
283 g_return_if_fail(self != NULL);
284 g_return_if_fail(self->type == FUNCARG_NODE);
285 free_type(self->atype);
287 free_node_list(self->checks);
291 void free_method (Method * self)
293 g_return_if_fail(self != NULL);
294 g_return_if_fail(self->type == METHOD_NODE);
295 free_type(self->mtype);
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);
300 free_node_list(self->args);
301 g_free(self->onerror);
302 g_free(self->defreturn);
307 void free_type (Type * self)
309 g_return_if_fail(self != NULL);
310 g_return_if_fail(self->type == TYPE_NODE);
312 g_free(self->pointer);
313 g_free(self->postfix);
317 void free_variable (Variable * self)
319 g_return_if_fail(self != NULL);
320 g_return_if_fail(self->type == VARIABLE_NODE);
321 free_type(self->vtype);
323 g_free(self->destructor);
324 g_free(self->initializer);
328 Node * copy_node(Node *node)
330 g_return_val_if_fail(node != NULL, NULL);
331 g_return_val_if_fail(node->type >= 0 && node->type < LAST_NODE_TYPE, NULL);
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;
345 void free_node(Node *node)
347 g_return_if_fail(node != NULL);
348 g_return_if_fail(node->type >= 0 && node->type < LAST_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;
362 GList * copy_node_list(GList *nodes)
365 nodes = g_list_copy(nodes);
366 for(li = nodes; li != NULL; li = li->next) {
367 li->data = copy_node(li->data);
372 void free_node_list(GList *nodes)
375 for(li = nodes; li != NULL; li = li->next) {