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 * bonobo_x_class, char * chunk_size, GList * nodes)
46 Class * self = g_new0(Class, 1);
47 self->type = CLASS_NODE;
50 self->bonobo_x_class = bonobo_x_class;
51 self->chunk_size = chunk_size;
56 Node * new_funcarg (Type * atype, char * name, GList * checks)
58 FuncArg * self = g_new0(FuncArg, 1);
59 self->type = FUNCARG_NODE;
62 self->checks = checks;
66 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, gboolean bonobo_x_func)
68 Method * self = g_new0(Method, 1);
69 self->type = METHOD_NODE;
71 self->method = method;
74 self->gtktypes = gtktypes;
78 self->onerror = onerror;
79 self->defreturn = defreturn;
81 self->line_no = line_no;
82 self->ccode_line = ccode_line;
83 self->vararg = vararg;
84 self->unique_id = unique_id;
85 self->bonobo_x_func = bonobo_x_func;
89 Node * new_type (char * name, char * pointer, char * postfix)
91 Type * self = g_new0(Type, 1);
92 self->type = TYPE_NODE;
94 self->pointer = pointer;
95 self->postfix = postfix;
99 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)
101 Variable * self = g_new0(Variable, 1);
102 self->type = VARIABLE_NODE;
106 self->line_no = line_no;
107 self->destructor = destructor;
108 self->destructor_line = destructor_line;
109 self->destructor_simple = destructor_simple;
110 self->initializer = initializer;
111 self->initializer_line = initializer_line;
115 Argument * copy_argument (Argument * self)
118 g_return_val_if_fail(self != NULL, NULL);
119 g_return_val_if_fail(self->type == ARGUMENT_NODE, NULL);
120 new = g_new0(Argument, 1);
121 new->type = ARGUMENT_NODE;
122 new->gtktype = g_strdup(self->gtktype);
123 new->atype = copy_type(self->atype);
124 new->flags = g_list_copy(self->flags); COPY_LIST_VALS(new->flags, g_strdup);
125 new->name = g_strdup(self->name);
126 new->get = g_strdup(self->get);
127 new->get_line = self->get_line;
128 new->set = g_strdup(self->set);
129 new->set_line = self->set_line;
130 new->line_no = self->line_no;
134 CCode * copy_ccode (CCode * self)
137 g_return_val_if_fail(self != NULL, NULL);
138 g_return_val_if_fail(self->type == CCODE_NODE, NULL);
139 new = g_new0(CCode, 1);
140 new->type = CCODE_NODE;
141 new->cctype = self->cctype;
142 new->cbuf = g_strdup(self->cbuf);
143 new->line_no = self->line_no;
147 Check * copy_check (Check * self)
150 g_return_val_if_fail(self != NULL, NULL);
151 g_return_val_if_fail(self->type == CHECK_NODE, NULL);
152 new = g_new0(Check, 1);
153 new->type = CHECK_NODE;
154 new->chtype = self->chtype;
155 new->number = g_strdup(self->number);
159 Class * copy_class (Class * self)
162 g_return_val_if_fail(self != NULL, NULL);
163 g_return_val_if_fail(self->type == CLASS_NODE, NULL);
164 new = g_new0(Class, 1);
165 new->type = CLASS_NODE;
166 new->otype = g_strdup(self->otype);
167 new->ptype = g_strdup(self->ptype);
168 new->bonobo_x_class = g_strdup(self->bonobo_x_class);
169 new->chunk_size = g_strdup(self->chunk_size);
170 new->nodes = copy_node_list(self->nodes);
174 FuncArg * copy_funcarg (FuncArg * self)
177 g_return_val_if_fail(self != NULL, NULL);
178 g_return_val_if_fail(self->type == FUNCARG_NODE, NULL);
179 new = g_new0(FuncArg, 1);
180 new->type = FUNCARG_NODE;
181 new->atype = copy_type(self->atype);
182 new->name = g_strdup(self->name);
183 new->checks = copy_node_list(self->checks);
187 Method * copy_method (Method * self)
190 g_return_val_if_fail(self != NULL, NULL);
191 g_return_val_if_fail(self->type == METHOD_NODE, NULL);
192 new = g_new0(Method, 1);
193 new->type = METHOD_NODE;
194 new->scope = self->scope;
195 new->method = self->method;
196 new->mtype = copy_type(self->mtype);
197 new->otype = g_strdup(self->otype);
198 new->gtktypes = g_list_copy(self->gtktypes); COPY_LIST_VALS(new->gtktypes, g_strdup);
199 new->flags = g_list_copy(self->flags); COPY_LIST_VALS(new->flags, g_strdup);
200 new->id = g_strdup(self->id);
201 new->args = copy_node_list(self->args);
202 new->onerror = g_strdup(self->onerror);
203 new->defreturn = g_strdup(self->defreturn);
204 new->cbuf = g_strdup(self->cbuf);
205 new->line_no = self->line_no;
206 new->ccode_line = self->ccode_line;
207 new->vararg = self->vararg;
208 new->unique_id = self->unique_id;
209 new->bonobo_x_func = self->bonobo_x_func;
213 Type * copy_type (Type * self)
216 g_return_val_if_fail(self != NULL, NULL);
217 g_return_val_if_fail(self->type == TYPE_NODE, NULL);
218 new = g_new0(Type, 1);
219 new->type = TYPE_NODE;
220 new->name = g_strdup(self->name);
221 new->pointer = g_strdup(self->pointer);
222 new->postfix = g_strdup(self->postfix);
226 Variable * copy_variable (Variable * self)
229 g_return_val_if_fail(self != NULL, NULL);
230 g_return_val_if_fail(self->type == VARIABLE_NODE, NULL);
231 new = g_new0(Variable, 1);
232 new->type = VARIABLE_NODE;
233 new->scope = self->scope;
234 new->vtype = copy_type(self->vtype);
235 new->id = g_strdup(self->id);
236 new->line_no = self->line_no;
237 new->destructor = g_strdup(self->destructor);
238 new->destructor_line = self->destructor_line;
239 new->destructor_simple = self->destructor_simple;
240 new->initializer = g_strdup(self->initializer);
241 new->initializer_line = self->initializer_line;
245 void free_argument (Argument * self)
247 g_return_if_fail(self != NULL);
248 g_return_if_fail(self->type == ARGUMENT_NODE);
249 g_free(self->gtktype);
250 free_type(self->atype);
251 g_list_foreach(self->flags, (GFunc)g_free, NULL); g_list_free(self->flags);
258 void free_ccode (CCode * self)
260 g_return_if_fail(self != NULL);
261 g_return_if_fail(self->type == CCODE_NODE);
266 void free_check (Check * self)
268 g_return_if_fail(self != NULL);
269 g_return_if_fail(self->type == CHECK_NODE);
270 g_free(self->number);
274 void free_class (Class * self)
276 g_return_if_fail(self != NULL);
277 g_return_if_fail(self->type == CLASS_NODE);
280 g_free(self->bonobo_x_class);
281 g_free(self->chunk_size);
282 free_node_list(self->nodes);
286 void free_funcarg (FuncArg * self)
288 g_return_if_fail(self != NULL);
289 g_return_if_fail(self->type == FUNCARG_NODE);
290 free_type(self->atype);
292 free_node_list(self->checks);
296 void free_method (Method * self)
298 g_return_if_fail(self != NULL);
299 g_return_if_fail(self->type == METHOD_NODE);
300 free_type(self->mtype);
302 g_list_foreach(self->gtktypes, (GFunc)g_free, NULL); g_list_free(self->gtktypes);
303 g_list_foreach(self->flags, (GFunc)g_free, NULL); g_list_free(self->flags);
305 free_node_list(self->args);
306 g_free(self->onerror);
307 g_free(self->defreturn);
312 void free_type (Type * self)
314 g_return_if_fail(self != NULL);
315 g_return_if_fail(self->type == TYPE_NODE);
317 g_free(self->pointer);
318 g_free(self->postfix);
322 void free_variable (Variable * self)
324 g_return_if_fail(self != NULL);
325 g_return_if_fail(self->type == VARIABLE_NODE);
326 free_type(self->vtype);
328 g_free(self->destructor);
329 g_free(self->initializer);
333 Node * copy_node(Node *node)
335 g_return_val_if_fail(node != NULL, NULL);
336 g_return_val_if_fail(node->type >= 0 && node->type < LAST_NODE_TYPE, NULL);
338 case ARGUMENT_NODE: return (Node *)copy_argument ((Argument *)node);
339 case CCODE_NODE: return (Node *)copy_ccode ((CCode *)node);
340 case CHECK_NODE: return (Node *)copy_check ((Check *)node);
341 case CLASS_NODE: return (Node *)copy_class ((Class *)node);
342 case FUNCARG_NODE: return (Node *)copy_funcarg ((FuncArg *)node);
343 case METHOD_NODE: return (Node *)copy_method ((Method *)node);
344 case TYPE_NODE: return (Node *)copy_type ((Type *)node);
345 case VARIABLE_NODE: return (Node *)copy_variable ((Variable *)node);
346 default: return NULL;
350 void free_node(Node *node)
352 g_return_if_fail(node != NULL);
353 g_return_if_fail(node->type >= 0 && node->type < LAST_NODE_TYPE);
355 case ARGUMENT_NODE: free_argument ((Argument *)node); return;
356 case CCODE_NODE: free_ccode ((CCode *)node); return;
357 case CHECK_NODE: free_check ((Check *)node); return;
358 case CLASS_NODE: free_class ((Class *)node); return;
359 case FUNCARG_NODE: free_funcarg ((FuncArg *)node); return;
360 case METHOD_NODE: free_method ((Method *)node); return;
361 case TYPE_NODE: free_type ((Type *)node); return;
362 case VARIABLE_NODE: free_variable ((Variable *)node); return;
367 GList * copy_node_list(GList *nodes)
370 nodes = g_list_copy(nodes);
371 for(li = nodes; li != NULL; li = li->next) {
372 li->data = copy_node(li->data);
377 void free_node_list(GList *nodes)
380 for(li = nodes; li != NULL; li = li->next) {