X-Git-Url: https://git.draconx.ca/gitweb/gob-dx.git/blobdiff_plain/c190a2ae41238682c1430b8482683b6a7c15c66b..3b10bbd3a88d6e16146414d91d06bb2f36347bfc:/src/tree.c diff --git a/src/tree.c b/src/tree.c index 91e3a23..6382d05 100644 --- a/src/tree.c +++ b/src/tree.c @@ -19,16 +19,18 @@ * USA. */ +#include "config.h" #include #include "tree.h" Node * -new_ccode(int header, GString *cbuf) +new_ccode(int cctype, char *cbuf, int line_no) { CCode *node = (CCode *)g_new(Node,1); node->type = CCODE_NODE; - node->header = header; + node->cctype = cctype; node->cbuf = cbuf; + node->line_no = line_no; return (Node *)node; } @@ -44,12 +46,13 @@ new_class(char *otype, char *ptype, GList *nodes) } Node * -new_type(int stars, char *name) +new_type(int stars, char *name, char *postfix) { Type *node = (Type *)g_new(Node,1); node->type = TYPE_NODE; node->stars = stars; node->name = name; + node->postfix = postfix; return (Node *)node; } @@ -75,42 +78,76 @@ new_funcarg(Type *atype, char *name, GList *checks) } Node * -new_method(int scope, Type *mtype, char *otype, GList *gtktypes, char *id, GList *args, char *onerror, GString *cbuf, int line_no) +new_method(int scope, int method, Type *mtype, char *otype, + GList *gtktypes, GList *flags, char *id, GList *args, + char *onerror, char *cbuf, int line_no, int ccode_line, + gboolean vararg) { Method *node = (Method *)g_new(Node,1); node->type = METHOD_NODE; node->scope = scope; + node->method = method; node->mtype = mtype; node->otype = otype; node->gtktypes = gtktypes; + node->flags = flags; node->id = id; node->args = args; node->onerror = onerror; node->cbuf = cbuf; node->line_no = line_no; + node->ccode_line = ccode_line; + node->vararg = vararg; return (Node *)node; } Node * -new_argument(char *gtktype, GList *flags, char *name, GString *get, GString *set) +new_argument(char *gtktype, Type *atype, GList *flags, char *name, char *get, int get_line, char *set, int set_line, int line_no) { Argument *node = (Argument *)g_new(Node,1); node->type = ARGUMENT_NODE; node->gtktype = gtktype; + node->atype = atype; node->flags = flags; node->name = name; node->get = get; + node->get_line = get_line; node->set = set; + node->set_line = set_line; + node->line_no = line_no; return (Node *)node; } Node * -new_variable(int scope, Type *vtype, char *id) +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 *node = (Variable *)g_new(Node,1); node->type = VARIABLE_NODE; node->scope = scope; node->vtype = vtype; node->id = id; + node->line_no = line_no; + node->destructor = destructor; + node->destructor_line = destructor_line; + node->destructor_simple = destructor_simple; + node->initializer = initializer; + node->initializer_line = initializer_line; return (Node *)node; } + +Type * +copy_type(Type *type) +{ + Node *node; + + if(!type) return NULL; + + node = new_type(type->stars, + g_strdup(type->name), + g_strdup(type->postfix)); + + return (Type *)node; +}