codea: mehr debug code
[uebersetzerbau-ss10.git] / codea / tree.c
index 19d750c25b4de270e887f873daabdd35388431ae..9ee0b479161005c252aa2b103b4c5c2488589ed2 100644 (file)
@@ -1,5 +1,6 @@
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include "tree.h"
 
 #if 0
@@ -34,7 +35,7 @@ struct treenode *new_node(int op, struct treenode *l, struct treenode *r, int ex
        return new;
 }
 
-struct treenode *new_param(int op, struct treenode *l, struct treenode *r, int param_index, int exprcount)
+struct treenode *new_param(int op, char *name, struct treenode *l, struct treenode *r, int param_index, int exprcount)
 {
        struct treenode *new = new_node(op, l, r, exprcount);
 
@@ -42,17 +43,26 @@ struct treenode *new_param(int op, struct treenode *l, struct treenode *r, int p
        fprintf(stderr, "new_param: %i (index)\n", param_index);
 #endif
        new->param_index = param_index;
+       new->name = name;
        return new;
 }
 
 struct treenode *new_number(long val, int exprcount)
 {
        struct treenode *new = _new_plain(O_NUM);
+       /* TODO: maximal groesse? */
+#define BUFMAX 40
+       char *t = (char*) malloc(BUFMAX);
+
 #ifdef DDTREE
        fprintf(stderr, "new_number: %i\n", val);
 #endif
        new->val = val;
        new->exprcount = exprcount;
+       memset(t, 0, BUFMAX);
+       sprintf(t, "%li", val);
+       new->name = t;
+
        return new;
 }
 
@@ -67,7 +77,7 @@ static void write_indent(int i)
 void write_tree(struct treenode *node, int indent)
 {
        write_indent(indent);
-       fprintf(stderr, "%s @ %%%s (%i)\n", o_names[node->op], node->reg, node->exprcount);
+       fprintf(stderr, "%s @ %%%s (%i). \"%s\"\n", o_names[node->op], node->reg, node->exprcount, node->name == (char*) NULL ? "" : node->name);
        if(node->kids[0] != TREENULL) {
                write_tree(node->kids[0], indent+1);
        }