]> git.draconx.ca Git - gob-dx.git/blobdiff - src/tree.c
Release 0.93.0
[gob-dx.git] / src / tree.c
index 530145b355c463543aaca312a8a6c72510967b4f..6382d05979e56044c5e4e4161e640ab24ead2514 100644 (file)
 #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;
 }
 
@@ -45,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;
 }
 
@@ -76,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;
+}