codea: super mega opt fuer einen sub spezialfall
[uebersetzerbau-ss10.git] / codea / tree.c
index 098f975e14bb3442c29cc0951becc55d2c6dcfce..82d986a6fa921f2921683c615d361be301041d5e 100644 (file)
@@ -70,14 +70,17 @@ struct treenode *new_number(long val, int exprcount)
        /* TODO: maximal groesse? */
 #define BUFMAX 40
        char *t = (char*) malloc(BUFMAX);
-       if(val == -2) {
+
+       if (val == 0) {
+               new = _new_plain(O_NULL);
+       } else if(val == -1) {
+               new = _new_plain(O_MONE);
+       } else if(val == -2) {
                new = _new_plain(O_MTWO);
        } else if(val == -4) {
                new = _new_plain(O_MFOUR);
        } else if(val == -8) {
                new = _new_plain(O_MEIGHT);
-       } else if(val == -1) {
-               new = _new_plain(O_MONE);
        } else {
                new = _new_plain(O_NUM);
        }
@@ -104,6 +107,7 @@ static void write_indent(int i)
 
 void write_tree(struct treenode *node, int indent)
 {
+       if(node == TREENULL) return;
        write_indent(indent);
        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) {