X-Git-Url: http://git.draconx.ca/gitweb/gob-dx.git/blobdiff_plain/4c9cb9b99991c36920bd17e366e2128d1b22eb6e..3b10bbd3a88d6e16146414d91d06bb2f36347bfc:/src/tree.c diff --git a/src/tree.c b/src/tree.c index a68b974..6382d05 100644 --- a/src/tree.c +++ b/src/tree.c @@ -24,11 +24,11 @@ #include "tree.h" Node * -new_ccode(int header, GString *cbuf, int line_no) +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; @@ -46,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; } @@ -77,45 +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,int ccode_line) +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, int get_line, GString *set, int set_line) +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; +}