]> git.draconx.ca Git - gob-dx.git/blobdiff - src/treefuncs.c
Release 0.93.2
[gob-dx.git] / src / treefuncs.c
diff --git a/src/treefuncs.c b/src/treefuncs.c
new file mode 100644 (file)
index 0000000..e1b2be6
--- /dev/null
@@ -0,0 +1,374 @@
+/* Generated by generate_treefuncs.pl from treefuncs.def!
+ * Do not edit by hand! */
+
+#include <glib.h>
+#include "treefuncs.h"
+
+#define COPY_LIST_VALS(list,func) { GList *li; for(li=(list);li;li=li->next) { li->data=func(li->data); } }
+
+Node * new_argument (char * gtktype, Type * atype, GList * flags, char * name, char * get, int get_line, char * set, int set_line, int line_no)
+{
+       Argument * self = g_new0(Argument, 1);
+       self->type = ARGUMENT_NODE;
+       self->gtktype = gtktype;
+       self->atype = atype;
+       self->flags = flags;
+       self->name = name;
+       self->get = get;
+       self->get_line = get_line;
+       self->set = set;
+       self->set_line = set_line;
+       self->line_no = line_no;
+       return (Node *)self;
+}
+
+Node * new_ccode (int cctype, char * cbuf, int line_no)
+{
+       CCode * self = g_new0(CCode, 1);
+       self->type = CCODE_NODE;
+       self->cctype = cctype;
+       self->cbuf = cbuf;
+       self->line_no = line_no;
+       return (Node *)self;
+}
+
+Node * new_check (int chtype, char * number)
+{
+       Check * self = g_new0(Check, 1);
+       self->type = CHECK_NODE;
+       self->chtype = chtype;
+       self->number = number;
+       return (Node *)self;
+}
+
+Node * new_class (char * otype, char * ptype, GList * nodes)
+{
+       Class * self = g_new0(Class, 1);
+       self->type = CLASS_NODE;
+       self->otype = otype;
+       self->ptype = ptype;
+       self->nodes = nodes;
+       return (Node *)self;
+}
+
+Node * new_funcarg (Type * atype, char * name, GList * checks)
+{
+       FuncArg * self = g_new0(FuncArg, 1);
+       self->type = FUNCARG_NODE;
+       self->atype = atype;
+       self->name = name;
+       self->checks = checks;
+       return (Node *)self;
+}
+
+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)
+{
+       Method * self = g_new0(Method, 1);
+       self->type = METHOD_NODE;
+       self->scope = scope;
+       self->method = method;
+       self->mtype = mtype;
+       self->otype = otype;
+       self->gtktypes = gtktypes;
+       self->flags = flags;
+       self->id = id;
+       self->args = args;
+       self->onerror = onerror;
+       self->defreturn = defreturn;
+       self->cbuf = cbuf;
+       self->line_no = line_no;
+       self->ccode_line = ccode_line;
+       self->vararg = vararg;
+       return (Node *)self;
+}
+
+Node * new_type (int stars, char * name, char * postfix)
+{
+       Type * self = g_new0(Type, 1);
+       self->type = TYPE_NODE;
+       self->stars = stars;
+       self->name = name;
+       self->postfix = postfix;
+       return (Node *)self;
+}
+
+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)
+{
+       Variable * self = g_new0(Variable, 1);
+       self->type = VARIABLE_NODE;
+       self->scope = scope;
+       self->vtype = vtype;
+       self->id = id;
+       self->line_no = line_no;
+       self->destructor = destructor;
+       self->destructor_line = destructor_line;
+       self->destructor_simple = destructor_simple;
+       self->initializer = initializer;
+       self->initializer_line = initializer_line;
+       return (Node *)self;
+}
+
+Argument * copy_argument (Argument * self)
+{
+       Argument * new;
+       g_return_if_fail(self != NULL);
+       g_return_if_fail(self->type == ARGUMENT_NODE);
+       new = g_new0(Argument, 1);
+       new->type = ARGUMENT_NODE;
+       new->gtktype = g_strdup(self->gtktype);
+       new->atype = copy_type(self->atype);
+       new->flags = g_list_copy(self->flags); COPY_LIST_VALS(new->flags, g_strdup);
+       new->name = g_strdup(self->name);
+       new->get = g_strdup(self->get);
+       new->get_line = self->get_line;
+       new->set = g_strdup(self->set);
+       new->set_line = self->set_line;
+       new->line_no = self->line_no;
+       return new;
+}
+
+CCode * copy_ccode (CCode * self)
+{
+       CCode * new;
+       g_return_if_fail(self != NULL);
+       g_return_if_fail(self->type == CCODE_NODE);
+       new = g_new0(CCode, 1);
+       new->type = CCODE_NODE;
+       new->cctype = self->cctype;
+       new->cbuf = g_strdup(self->cbuf);
+       new->line_no = self->line_no;
+       return new;
+}
+
+Check * copy_check (Check * self)
+{
+       Check * new;
+       g_return_if_fail(self != NULL);
+       g_return_if_fail(self->type == CHECK_NODE);
+       new = g_new0(Check, 1);
+       new->type = CHECK_NODE;
+       new->chtype = self->chtype;
+       new->number = g_strdup(self->number);
+       return new;
+}
+
+Class * copy_class (Class * self)
+{
+       Class * new;
+       g_return_if_fail(self != NULL);
+       g_return_if_fail(self->type == CLASS_NODE);
+       new = g_new0(Class, 1);
+       new->type = CLASS_NODE;
+       new->otype = g_strdup(self->otype);
+       new->ptype = g_strdup(self->ptype);
+       new->nodes = copy_node_list(self->nodes);
+       return new;
+}
+
+FuncArg * copy_funcarg (FuncArg * self)
+{
+       FuncArg * new;
+       g_return_if_fail(self != NULL);
+       g_return_if_fail(self->type == FUNCARG_NODE);
+       new = g_new0(FuncArg, 1);
+       new->type = FUNCARG_NODE;
+       new->atype = copy_type(self->atype);
+       new->name = g_strdup(self->name);
+       new->checks = copy_node_list(self->checks);
+       return new;
+}
+
+Method * copy_method (Method * self)
+{
+       Method * new;
+       g_return_if_fail(self != NULL);
+       g_return_if_fail(self->type == METHOD_NODE);
+       new = g_new0(Method, 1);
+       new->type = METHOD_NODE;
+       new->scope = self->scope;
+       new->method = self->method;
+       new->mtype = copy_type(self->mtype);
+       new->otype = g_strdup(self->otype);
+       new->gtktypes = g_list_copy(self->gtktypes); COPY_LIST_VALS(new->gtktypes, g_strdup);
+       new->flags = g_list_copy(self->flags); COPY_LIST_VALS(new->flags, g_strdup);
+       new->id = g_strdup(self->id);
+       new->args = copy_node_list(self->args);
+       new->onerror = g_strdup(self->onerror);
+       new->defreturn = g_strdup(self->defreturn);
+       new->cbuf = g_strdup(self->cbuf);
+       new->line_no = self->line_no;
+       new->ccode_line = self->ccode_line;
+       new->vararg = self->vararg;
+       return new;
+}
+
+Type * copy_type (Type * self)
+{
+       Type * new;
+       g_return_if_fail(self != NULL);
+       g_return_if_fail(self->type == TYPE_NODE);
+       new = g_new0(Type, 1);
+       new->type = TYPE_NODE;
+       new->stars = self->stars;
+       new->name = g_strdup(self->name);
+       new->postfix = g_strdup(self->postfix);
+       return new;
+}
+
+Variable * copy_variable (Variable * self)
+{
+       Variable * new;
+       g_return_if_fail(self != NULL);
+       g_return_if_fail(self->type == VARIABLE_NODE);
+       new = g_new0(Variable, 1);
+       new->type = VARIABLE_NODE;
+       new->scope = self->scope;
+       new->vtype = copy_type(self->vtype);
+       new->id = g_strdup(self->id);
+       new->line_no = self->line_no;
+       new->destructor = g_strdup(self->destructor);
+       new->destructor_line = self->destructor_line;
+       new->destructor_simple = self->destructor_simple;
+       new->initializer = g_strdup(self->initializer);
+       new->initializer_line = self->initializer_line;
+       return new;
+}
+
+void free_argument (Argument * self)
+{
+       g_return_if_fail(self != NULL);
+       g_return_if_fail(self->type == ARGUMENT_NODE);
+       g_free(self->gtktype);
+       free_type(self->atype);
+       g_list_foreach(self->flags, (GFunc)g_free, NULL); g_list_free(self->flags);
+       g_free(self->name);
+       g_free(self->get);
+       g_free(self->set);
+       g_free(self);
+}
+
+void free_ccode (CCode * self)
+{
+       g_return_if_fail(self != NULL);
+       g_return_if_fail(self->type == CCODE_NODE);
+       g_free(self->cbuf);
+       g_free(self);
+}
+
+void free_check (Check * self)
+{
+       g_return_if_fail(self != NULL);
+       g_return_if_fail(self->type == CHECK_NODE);
+       g_free(self->number);
+       g_free(self);
+}
+
+void free_class (Class * self)
+{
+       g_return_if_fail(self != NULL);
+       g_return_if_fail(self->type == CLASS_NODE);
+       g_free(self->otype);
+       g_free(self->ptype);
+       free_node_list(self->nodes);
+       g_free(self);
+}
+
+void free_funcarg (FuncArg * self)
+{
+       g_return_if_fail(self != NULL);
+       g_return_if_fail(self->type == FUNCARG_NODE);
+       free_type(self->atype);
+       g_free(self->name);
+       free_node_list(self->checks);
+       g_free(self);
+}
+
+void free_method (Method * self)
+{
+       g_return_if_fail(self != NULL);
+       g_return_if_fail(self->type == METHOD_NODE);
+       free_type(self->mtype);
+       g_free(self->otype);
+       g_list_foreach(self->gtktypes, (GFunc)g_free, NULL); g_list_free(self->gtktypes);
+       g_list_foreach(self->flags, (GFunc)g_free, NULL); g_list_free(self->flags);
+       g_free(self->id);
+       free_node_list(self->args);
+       g_free(self->onerror);
+       g_free(self->defreturn);
+       g_free(self->cbuf);
+       g_free(self);
+}
+
+void free_type (Type * self)
+{
+       g_return_if_fail(self != NULL);
+       g_return_if_fail(self->type == TYPE_NODE);
+       g_free(self->name);
+       g_free(self->postfix);
+       g_free(self);
+}
+
+void free_variable (Variable * self)
+{
+       g_return_if_fail(self != NULL);
+       g_return_if_fail(self->type == VARIABLE_NODE);
+       free_type(self->vtype);
+       g_free(self->id);
+       g_free(self->destructor);
+       g_free(self->initializer);
+       g_free(self);
+}
+
+Node * copy_node(Node *node)
+{
+       g_return_if_fail(node != NULL);
+       g_return_if_fail(node->type >= 0 && node->type < LAST_NODE_TYPE);
+       switch(node->type) {
+       case ARGUMENT_NODE: return (Node *)copy_argument ((Argument *)node);
+       case CCODE_NODE: return (Node *)copy_ccode ((CCode *)node);
+       case CHECK_NODE: return (Node *)copy_check ((Check *)node);
+       case CLASS_NODE: return (Node *)copy_class ((Class *)node);
+       case FUNCARG_NODE: return (Node *)copy_funcarg ((FuncArg *)node);
+       case METHOD_NODE: return (Node *)copy_method ((Method *)node);
+       case TYPE_NODE: return (Node *)copy_type ((Type *)node);
+       case VARIABLE_NODE: return (Node *)copy_variable ((Variable *)node);
+       default: return NULL;
+       }
+}
+
+void free_node(Node *node)
+{
+       g_return_if_fail(node != NULL);
+       g_return_if_fail(node->type >= 0 && node->type < LAST_NODE_TYPE);
+       switch(node->type) {
+       case ARGUMENT_NODE: free_argument ((Argument *)node); return;
+       case CCODE_NODE: free_ccode ((CCode *)node); return;
+       case CHECK_NODE: free_check ((Check *)node); return;
+       case CLASS_NODE: free_class ((Class *)node); return;
+       case FUNCARG_NODE: free_funcarg ((FuncArg *)node); return;
+       case METHOD_NODE: free_method ((Method *)node); return;
+       case TYPE_NODE: free_type ((Type *)node); return;
+       case VARIABLE_NODE: free_variable ((Variable *)node); return;
+       default: return;
+       }
+}
+
+GList * copy_node_list(GList *nodes)
+{
+       GList *li;
+       nodes = g_list_copy(nodes);
+       for(li = nodes; li != NULL; li = li->next) {
+               li->data = copy_node(li->data);
+       }
+       return nodes;
+}
+
+void free_node_list(GList *nodes)
+{
+       GList *li;
+       for(li = nodes; li != NULL; li = li->next) {
+               free_node(li->data);
+       }
+       g_list_free(nodes);
+}
+