codea: refactor, teil1
authorBernhard Urban <lewurm@gmail.com>
Tue, 18 May 2010 13:15:40 +0000 (15:15 +0200)
committerBernhard Urban <lewurm@gmail.com>
Tue, 18 May 2010 13:15:40 +0000 (15:15 +0200)
codea/chelper.c
codea/chelper.h
codea/code.bfe
codea/parser.y
codea/symtable.c
codea/tree.c
codea/tree.h

index 25893f9ae67873ba743bb8b5e4585a09d05fddaf..015e7a35244bfd13de60e33cd2f4584737f642f9 100644 (file)
@@ -4,7 +4,7 @@
 #include "chelper.h"
 #include "tree.h"
 
 #include "chelper.h"
 #include "tree.h"
 
-#if 1
+#if 0
 #define DDCHELP
 #endif
 
 #define DDCHELP
 #endif
 
@@ -24,12 +24,6 @@ void func_footer(void)
 
 void move(char *src, char *dst)
 {
 
 void move(char *src, char *dst)
 {
-       if(src == NULL) {
-               printf("//wtf, src ist null\n");
-       }
-       if(dst == NULL) {
-               printf("//wtf, dst ist null\n");
-       }
        if(strcmp(src,dst) != 0) {
                printf("\tmovq %%%s, %%%s\n", src, dst);
        }
        if(strcmp(src,dst) != 0) {
                printf("\tmovq %%%s, %%%s\n", src, dst);
        }
@@ -42,12 +36,7 @@ void moveimm(long imm, char *dst)
        printf("\tmovq %s, %%%s\n", buf, dst);
 }
 
        printf("\tmovq %s, %%%s\n", buf, dst);
 }
 
-void ret(void)
-{
-       printf("\tret\n");
-}
-
-char *next_reg(char *s, short skip, int params)
+char *next_reg(char *s, int params)
 {
        int i = 0;
        if (s != (char*) NULL) {
 {
        int i = 0;
        if (s != (char*) NULL) {
@@ -56,20 +45,9 @@ char *next_reg(char *s, short skip, int params)
                }
                i = (i+1) % REGLEN;
        }
                }
                i = (i+1) % REGLEN;
        }
-       if(skip) {
-               i = (i+1) % REGLEN;
-       }
 #ifdef DDCHELP
        fprintf(stderr, "next_reg(): %s (bei %i parameter)\n", regs64[i], params);
 #endif
 #ifdef DDCHELP
        fprintf(stderr, "next_reg(): %s (bei %i parameter)\n", regs64[i], params);
 #endif
-       /* TODO: <= passt? */
-       if(REGLEN - params <= i) {
-               fprintf(stderr, "next_reg(): register \"%s\" in dem sich ein parameter befindet wird als temporaeres register verwendet(params: %i, i: %i)\n", regs64[i], params, i);
-               /* TODO: exit hier? */
-#if 0
-               exit(4);
-#endif
-       }
        return regs64[i];
 }
 
        return regs64[i];
 }
 
@@ -86,7 +64,6 @@ char *reg_64to8l(char *s)
        exit(4);
 }
 
        exit(4);
 }
 
-
 char *param_reg(int num)
 {
        char *regs[] = {"rdi", "rsi", "rdx", "rcx", "r8", "r9"};
 char *param_reg(int num)
 {
        char *regs[] = {"rdi", "rsi", "rdx", "rcx", "r8", "r9"};
index de14489a05716e0a6aa1e3c587723acb3b93fc79..d857db08a3cec2881d2b43dedba76c8c32b97ca2 100644 (file)
@@ -2,9 +2,8 @@
 #define __CHELPER_H
 void func_header(char *s);
 void func_footer(void);
 #define __CHELPER_H
 void func_header(char *s);
 void func_footer(void);
-char *next_reg(char *s, short skip, int params);
+char *next_reg(char *s, int params);
 char *reg_64to8l(char *s);
 char *param_reg(int num);
 char *reg_64to8l(char *s);
 char *param_reg(int num);
-void ret(void);
 void move(char *src, char *dest);
 #endif
 void move(char *src, char *dest);
 #endif
index e5677b20c14078702fe9177e5f7d5429c248bf54..4d024afa153327e2e2dc635271f764ae6d6d2576 100644 (file)
@@ -1,21 +1,28 @@
 %{
 #define BFEHAX
 
 %{
 #define BFEHAX
 
+/* macros zum registerzugriff bei kinder */
 #define KID_REG(A) bnode->kids[A]->reg
 #define KIDKID_REG(A,B) bnode->kids[A]->kids[B]->reg
 #define KIDKIDKID_REG(A,B,C) bnode->kids[A]->kids[B]->kids[C]->reg
 #define KID_REG(A) bnode->kids[A]->reg
 #define KIDKID_REG(A,B) bnode->kids[A]->kids[B]->reg
 #define KIDKIDKID_REG(A,B,C) bnode->kids[A]->kids[B]->kids[C]->reg
+
+/* macros zum wertezugriff bei kindern */
 #define KID_VAL(A) bnode->kids[A]->val
 #define KIDKID_VAL(A,B) bnode->kids[A]->kids[B]->val
 #define KIDKIDKID_VAL(A,B,C) bnode->kids[A]->kids[B]->kids[C]->val
 #define KID_VAL(A) bnode->kids[A]->val
 #define KIDKID_VAL(A,B) bnode->kids[A]->kids[B]->val
 #define KIDKIDKID_VAL(A,B,C) bnode->kids[A]->kids[B]->kids[C]->val
+
+/* macros zum zugriff des aktuellen knotens */
 #define BN_REG bnode->reg
 #define BN_VAL bnode->val
 
 #define BN_REG bnode->reg
 #define BN_VAL bnode->val
 
-/* falls ein parameter auf der "leseseite" ist, soll das statt ein weiteres
- * register verwendet werden */
+/* wenn sich ein parameter auf der "leseseite" (also links bei at&t syntax)
+ * befindet, dann soll dieses register verwendet werden */
 #define KIDREG2PARM(A) if(bnode->kids[A]->param_index > -1) { bnode->kids[A]->reg = param_reg(bnode->kids[A]->param_index); }
 #define KIDKIDREG2PARM(A,B) if(bnode->kids[A]->kids[B]->param_index > -1) { bnode->kids[A]->kids[B]->reg = param_reg(bnode->kids[A]->kids[B]->param_index); }
 #define KIDKIDKIDREG2PARM(A,B,C) if(bnode->kids[A]->kids[B]->kids[C]->param_index > -1) { bnode->kids[A]->kids[B]->kids[C]->reg = param_reg(bnode->kids[A]->kids[B]->kids[C]->param_index); }
 
 #define KIDREG2PARM(A) if(bnode->kids[A]->param_index > -1) { bnode->kids[A]->reg = param_reg(bnode->kids[A]->param_index); }
 #define KIDKIDREG2PARM(A,B) if(bnode->kids[A]->kids[B]->param_index > -1) { bnode->kids[A]->kids[B]->reg = param_reg(bnode->kids[A]->kids[B]->param_index); }
 #define KIDKIDKIDREG2PARM(A,B,C) if(bnode->kids[A]->kids[B]->kids[C]->param_index > -1) { bnode->kids[A]->kids[B]->kids[C]->reg = param_reg(bnode->kids[A]->kids[B]->kids[C]->param_index); }
 
+/* wenn sich ein parameter auf der "schreibeseite" befindet (also rechts bei
+ * at&t syntax), dann muss es vorher in ein temporaeres register gemovt werden */
 #define KIDREG2ID(A) if(bnode->kids[A]->op == O_ID && bnode->kids[A]->param_index > -1) move(param_reg(bnode->kids[A]->param_index), bnode->kids[A]->reg);
 
 #include <stdio.h>
 #define KIDREG2ID(A) if(bnode->kids[A]->op == O_ID && bnode->kids[A]->param_index > -1) move(param_reg(bnode->kids[A]->param_index), bnode->kids[A]->reg);
 
 #include <stdio.h>
@@ -181,56 +188,64 @@ retexpr: expr
 expr: O_ID # 0 #
 expr: imm # 1 # moveimm(BN_VAL, BN_REG);
 
 expr: O_ID # 0 #
 expr: imm # 1 # moveimm(BN_VAL, BN_REG);
 
-expr: O_SUB(expr,expr) # 1 # gen_e_eno(bnode, "subq");
+
+expr: O_SUB(expr,expr)          # 1 # gen_e_eno(bnode, "subq");
 expr: O_SUB(expr,O_FIELD(expr)) # 2 # gen_e_field(bnode, "subq");
 expr: O_SUB(expr,O_FIELD(expr)) # 2 # gen_e_field(bnode, "subq");
-expr: O_SUB(expr,imm)    # 2 # gen_e_imm(bnode, "subq");
-expr: O_SUB(imm,expr)  # 2 # gen_imm_eno(bnode, "subq");
-expr: O_SUB(imm,O_FIELD(expr)) # 2 # gen_imm_field(bnode);
+expr: O_SUB(expr,imm)           # 2 # gen_e_imm(bnode, "subq");
+expr: O_SUB(imm,expr)           # 2 # gen_imm_eno(bnode, "subq");
+expr: O_SUB(imm,O_FIELD(expr))  # 2 # gen_imm_field(bnode);
 
 expr: O_SUB(expr,O_SUB(O_ID,expr)) # 2 # gen_subspecial(bnode, 0);
 
 expr: O_SUB(expr,O_SUB(O_ID,expr)) # 2 # gen_subspecial(bnode, 0);
-expr: O_SUB(expr,O_SUB(imm,expr)) # 2 # gen_subspecial(bnode, 1);
+expr: O_SUB(expr,O_SUB(imm,expr))  # 2 # gen_subspecial(bnode, 1);
 
 
-expr: O_SUB(expr,O_MUL(O_MONE,expr)) # 1 # gen_lea(bnode,0);
-expr: O_SUB(expr,O_MUL(O_MTWO,expr)) # 1 # gen_lea(bnode,0);
-expr: O_SUB(expr,O_MUL(O_MFOUR,expr)) # 1 # gen_lea(bnode,0);
+expr: O_SUB(expr,O_MUL(O_MONE,expr))   # 1 # gen_lea(bnode,0);
+expr: O_SUB(expr,O_MUL(O_MTWO,expr))   # 1 # gen_lea(bnode,0);
+expr: O_SUB(expr,O_MUL(O_MFOUR,expr))  # 1 # gen_lea(bnode,0);
 expr: O_SUB(expr,O_MUL(O_MEIGHT,expr)) # 1 # gen_lea(bnode,0);
 
 expr: O_SUB(expr,O_MUL(O_MEIGHT,expr)) # 1 # gen_lea(bnode,0);
 
-expr: O_SUB(expr,O_MUL(expr,O_MONE)) # 1 # gen_lea(bnode,1);
-expr: O_SUB(expr,O_MUL(expr,O_MTWO)) # 1 # gen_lea(bnode,1);
-expr: O_SUB(expr,O_MUL(expr,O_MFOUR)) # 1 # gen_lea(bnode,1);
+expr: O_SUB(expr,O_MUL(expr,O_MONE))   # 1 # gen_lea(bnode,1);
+expr: O_SUB(expr,O_MUL(expr,O_MTWO))   # 1 # gen_lea(bnode,1);
+expr: O_SUB(expr,O_MUL(expr,O_MFOUR))  # 1 # gen_lea(bnode,1);
 expr: O_SUB(expr,O_MUL(expr,O_MEIGHT)) # 1 # gen_lea(bnode,1);
 
 expr: O_SUB(expr,O_MUL(expr,O_MEIGHT)) # 1 # gen_lea(bnode,1);
 
-expr: O_ADD(expr,expr) # 1 # gen_e_eno(bnode, "addq");
-expr: O_ADD(expr,O_FIELD(expr)) # 2 # gen_e_field(bnode, "addq");
+
+expr: O_ADD(expr,expr)   # 1 # gen_e_eno(bnode, "addq");
 expr: O_ADD(expr,imm)    # 2 # gen_e_imm(bnode, "addq");
 expr: O_ADD(imm,expr)    # 2 # gen_imm_eno(bnode, "addq");
 
 expr: O_ADD(expr,imm)    # 2 # gen_e_imm(bnode, "addq");
 expr: O_ADD(imm,expr)    # 2 # gen_imm_eno(bnode, "addq");
 
-expr: O_MUL(expr,expr) # 1 # gen_e_eno(bnode, "imulq");
-expr: O_MUL(expr,O_FIELD(expr)) # 2 # gen_e_field(bnode, "imulq");
+expr: O_ADD(expr,O_FIELD(expr)) # 2 # gen_e_field(bnode, "addq");
+
+
+expr: O_MUL(expr,expr)   # 1 # gen_e_eno(bnode, "imulq");
 expr: O_MUL(expr,imm)    # 1 # gen_e_imm(bnode, "imulq");
 expr: O_MUL(expr,imm)    # 1 # gen_e_imm(bnode, "imulq");
+expr: O_MUL(imm,expr)    # 1 # gen_imm_eno(bnode, "imulq");
+
+expr: O_MUL(expr,O_FIELD(expr)) # 1 # gen_e_field(bnode, "imulq");
 expr: O_MUL(O_FIELD(expr),imm)  # 1 # gen_field_imm(bnode);
 expr: O_MUL(O_FIELD(expr),imm)  # 1 # gen_field_imm(bnode);
-expr: O_MUL(imm,expr)  # 1 # gen_imm_eno(bnode, "imulq");
 
 
-expr: O_OR(expr,expr) # 1 # gen_e_eno(bnode, "orq");
-expr: O_OR(expr,imm)    # 2 # gen_e_imm(bnode, "orq");
+expr: O_OR(expr,expr)          # 1 # gen_e_eno(bnode, "orq");
+expr: O_OR(expr,imm)           # 2 # gen_e_imm(bnode, "orq");
 expr: O_OR(expr,O_FIELD(expr)) # 2 # gen_e_field(bnode, "orq");
 
 expr: O_OR(expr,O_FIELD(expr)) # 2 # gen_e_field(bnode, "orq");
 
-expr: O_LESS(expr,expr) # 3 # gen_eqless(bnode, "l", 1, 1, 0);
+
+expr: O_LESS(expr,expr)          # 3 # gen_eqless(bnode, "l", 1, 1, 0);
 expr: O_LESS(expr,O_FIELD(expr)) # 3 # gen_eqless(bnode, "l", 1, 1, 1);
 expr: O_LESS(expr,O_FIELD(expr)) # 3 # gen_eqless(bnode, "l", 1, 1, 1);
-expr: O_LESS(expr,imm)  # 3 # gen_eqless(bnode, "l", 1, 0, 0);
-expr: O_LESS(imm,expr)  # 3 # gen_eqless(bnode, "g", 0, 1, 0);
+expr: O_LESS(expr,imm)           # 3 # gen_eqless(bnode, "l", 1, 0, 0);
+expr: O_LESS(imm,expr)           # 3 # gen_eqless(bnode, "g", 0, 1, 0);
+
 
 
-expr: O_EQ(expr,expr) # 3 # gen_eqless(bnode, "e", 1, 1, 0);
+expr: O_EQ(expr,expr)          # 3 # gen_eqless(bnode, "e", 1, 1, 0);
 expr: O_EQ(expr,O_FIELD(expr)) # 3 # gen_eqless(bnode, "e", 1, 1, 1);
 expr: O_EQ(expr,O_FIELD(expr)) # 3 # gen_eqless(bnode, "e", 1, 1, 1);
-expr: O_EQ(expr,imm)    # 3 # gen_eqless(bnode, "e", 1, 0, 0);
-expr: O_EQ(imm,expr)    # 3 # gen_eqless(bnode, "e", 0, 1, 0);
-expr: O_EQ(expr,O_NULL) # 3 # gen_eqless(bnode, "e", 1, 0, 0);
+expr: O_EQ(expr,imm)           # 3 # gen_eqless(bnode, "e", 1, 0, 0);
+expr: O_EQ(imm,expr)           # 3 # gen_eqless(bnode, "e", 0, 1, 0);
+expr: O_EQ(expr,O_NULL)        # 3 # gen_eqless(bnode, "e", 1, 0, 0);
+
 expr: O_EQ(O_EQ(expr,O_NULL),O_NULL)  # 3 # gen_eqless(bnode, "ne", 1, 0, 1);
 expr: O_EQ(O_EQ(O_EQ(expr,O_NULL),O_NULL),O_NULL) # 3 # gen_eqless(bnode, "e", 1, 0, 2);
 
 expr: O_EQ(O_EQ(expr,O_NULL),O_NULL)  # 3 # gen_eqless(bnode, "ne", 1, 0, 1);
 expr: O_EQ(O_EQ(O_EQ(expr,O_NULL),O_NULL),O_NULL) # 3 # gen_eqless(bnode, "e", 1, 0, 2);
 
-expr: O_FIELD(expr) # 1 # printf("\t//field(expr)\n"); KIDREG2PARM(0); printf("\tmovq %d(%%%s), %%%s\n", bnode->soffset * 8, KID_REG(0), BN_REG);
-expr: O_FIELD(imm) # 1 # printf("\t//field(imm)\n"); printf("\tmovq %d, %%%s\n", KID_VAL(0) + (bnode->soffset * 8), BN_REG);
 
 
+expr: O_FIELD(expr) # 1 # printf("\t//field(expr)\n"); KIDREG2PARM(0); printf("\tmovq %d(%%%s), %%%s\n", bnode->soffset * 8, KID_REG(0), BN_REG);
+expr: O_FIELD(imm)  # 1 # printf("\t//field(imm)\n"); printf("\tmovq %d, %%%s\n", KID_VAL(0) + (bnode->soffset * 8), BN_REG);
 
 
 imm: O_ADD(imm,imm)  # 0 # BN_VAL = KID_VAL(0) + KID_VAL(1);
 
 
 imm: O_ADD(imm,imm)  # 0 # BN_VAL = KID_VAL(0) + KID_VAL(1);
index c01bee7d93c7480451077e00ce4f2f346b74a563..bab08bcc61e9a2e434282959fd57eab41159c883 100644 (file)
@@ -187,7 +187,7 @@ Statement:
                statinout()
                xxputsin(@Expr.s@,)
                @i @Statement.node@ = new_node(O_RET, @Expr.node@, TREENULL, @Expr.exprcount@+1); fprintf(stderr, "RETURN: %s (gparamges: %i, exprcount: %i, gesamt %i [maximal: 7])\n", @Expr.gparamges@ + @Expr.exprcount@ + 1 > 7 ? "zu hohe tiefe" : "tiefe passt", @Expr.gparamges@, @Expr.exprcount@+1, @Expr.gparamges@+@Expr.exprcount@+1);
                statinout()
                xxputsin(@Expr.s@,)
                @i @Statement.node@ = new_node(O_RET, @Expr.node@, TREENULL, @Expr.exprcount@+1); fprintf(stderr, "RETURN: %s (gparamges: %i, exprcount: %i, gesamt %i [maximal: 7])\n", @Expr.gparamges@ + @Expr.exprcount@ + 1 > 7 ? "zu hohe tiefe" : "tiefe passt", @Expr.gparamges@, @Expr.exprcount@+1, @Expr.gparamges@+@Expr.exprcount@+1);
-               @reg @Statement.node@->reg = @Expr.node@->reg = next_reg((char *)NULL, 0, @Expr.gparamges@);
+               @reg @Statement.node@->reg = @Expr.node@->reg = next_reg((char *)NULL, @Expr.gparamges@);
          @}
        ;
 
          @}
        ;
 
@@ -237,11 +237,10 @@ Expr:
                @reg {
                        if(!(@Expr.node@->kids[0] == TREENULL && @Expr.node@->kids[1] == TREENULL)) {
                                @Term.node@->reg = @Expr.node@->reg;
                @reg {
                        if(!(@Expr.node@->kids[0] == TREENULL && @Expr.node@->kids[1] == TREENULL)) {
                                @Term.node@->reg = @Expr.node@->reg;
-                               @Term.node@->skip = 0;
                                if(@Minusterm.imm@) {
                                        @Minusterm.node@->reg = @Expr.node@->reg;
                                } else {
                                if(@Minusterm.imm@) {
                                        @Minusterm.node@->reg = @Expr.node@->reg;
                                } else {
-                                       @Minusterm.node@->reg = next_reg(@Term.node@->reg, @Expr.node@->skip, @Expr.gparamges@);
+                                       @Minusterm.node@->reg = next_reg(@Term.node@->reg, @Expr.gparamges@);
                                }
                        }
                }
                                }
                        }
                }
@@ -255,11 +254,10 @@ Expr:
 
                @reg {
                        @Term.node@->reg = @Expr.node@->reg;
 
                @reg {
                        @Term.node@->reg = @Expr.node@->reg;
-                       @Term.node@->skip = 0;
                        if(@Term.imm@) {
                                @Multerm.node@->reg = @Expr.node@->reg;
                        } else {
                        if(@Term.imm@) {
                                @Multerm.node@->reg = @Expr.node@->reg;
                        } else {
-                               @Multerm.node@->reg = next_reg(@Term.node@->reg, @Expr.node@->skip, @Expr.gparamges@);
+                               @Multerm.node@->reg = next_reg(@Term.node@->reg, @Expr.gparamges@);
                        }
                }
          @}
                        }
                }
          @}
@@ -271,10 +269,8 @@ Expr:
                @i @Expr.imm@ = @Term.imm@ && @Orterm.imm@;
 
                @reg {
                @i @Expr.imm@ = @Term.imm@ && @Orterm.imm@;
 
                @reg {
-                       /* TODO */
                        @Term.node@->reg = @Expr.node@->reg;
                        @Term.node@->reg = @Expr.node@->reg;
-                       @Term.node@->skip = 0;
-                       @Orterm.node@->reg = next_reg(@Term.node@->reg, @Expr.node@->skip, @Expr.gparamges@);
+                       @Orterm.node@->reg = next_reg(@Term.node@->reg, @Expr.gparamges@);
                }
          @}
 
                }
          @}
 
@@ -286,7 +282,7 @@ Expr:
 
                @reg {
                        @Term.0.node@->reg = @Expr.node@->reg;
 
                @reg {
                        @Term.0.node@->reg = @Expr.node@->reg;
-                       @Term.1.node@->reg = next_reg(@Term.0.node@->reg, @Expr.node@->skip, @Expr.gparamges@);
+                       @Term.1.node@->reg = next_reg(@Term.0.node@->reg, @Expr.gparamges@);
                }
          @}
 
                }
          @}
 
@@ -298,7 +294,7 @@ Expr:
 
                @reg {
                        @Term.0.node@->reg = @Expr.node@->reg;
 
                @reg {
                        @Term.0.node@->reg = @Expr.node@->reg;
-                       @Term.1.node@->reg = next_reg(@Term.0.node@->reg, @Expr.node@->skip, @Expr.gparamges@);
+                       @Term.1.node@->reg = next_reg(@Term.0.node@->reg, @Expr.gparamges@);
                }
          @}
        ;
                }
          @}
        ;
@@ -315,7 +311,7 @@ Minusterm:
                        if(@Minusterm.1.imm@) {
                                @Term.node@->reg = @Minusterm.node@->reg;
                        } else {
                        if(@Minusterm.1.imm@) {
                                @Term.node@->reg = @Minusterm.node@->reg;
                        } else {
-                               @Term.node@->reg = next_reg(@Minusterm.1.node@->reg, @Minusterm.node@->skip, @Minusterm.gparamges@);
+                               @Term.node@->reg = next_reg(@Minusterm.1.node@->reg, @Minusterm.gparamges@);
                        }
                }
          @}
                        }
                }
          @}
@@ -339,7 +335,7 @@ Multerm:
                        if(@Multerm.1.imm@) {
                                @Term.node@->reg = @Multerm.node@->reg;
                        } else {
                        if(@Multerm.1.imm@) {
                                @Term.node@->reg = @Multerm.node@->reg;
                        } else {
-                               @Term.node@->reg = next_reg(@Multerm.1.node@->reg, @Multerm.node@->skip, @Multerm.gparamges@);
+                               @Term.node@->reg = next_reg(@Multerm.1.node@->reg, @Multerm.gparamges@);
                        }
                }
          @}
                        }
                }
          @}
@@ -363,7 +359,7 @@ Orterm:
                        if(@Orterm.1.imm@) {
                                @Term.node@->reg = @Orterm.node@->reg;
                        } else {
                        if(@Orterm.1.imm@) {
                                @Term.node@->reg = @Orterm.node@->reg;
                        } else {
-                               @Term.node@->reg = next_reg(@Orterm.1.node@->reg, @Orterm.node@->skip, @Orterm.gparamges@);
+                               @Term.node@->reg = next_reg(@Orterm.1.node@->reg, @Orterm.gparamges@);
                        }
                }
          @}
                        }
                }
          @}
index f8e4f21b6d8166406ba9ce10781eb453d07d242c..47762405fad1f69f1da306b6ec9a37da155452f7 100755 (executable)
@@ -56,9 +56,7 @@ struct symbol *tab_add_symbol(struct symbol *tab, char *ident, short type, short
        new_elm->param_index = param_index;
        new_elm->soffset = soffset;
 
        new_elm->param_index = param_index;
        new_elm->soffset = soffset;
 
-       if(tab == SYMNULL) {
-               return new_elm;
-       }
+       if(tab == SYMNULL) return new_elm;
 
        while(elm->next != SYMNULL) {
                elm = elm->next;
 
        while(elm->next != SYMNULL) {
                elm = elm->next;
@@ -72,9 +70,7 @@ struct symbol *tab_lookup(struct symbol *tab, char *ident, short type)
 {
        struct symbol *elm = tab;
 
 {
        struct symbol *elm = tab;
 
-       if(tab == SYMNULL) {
-               return SYMNULL;
-       }
+       if(tab == SYMNULL) return SYMNULL;
 
        do {
                if((elm->type & type) && (strcmp(elm->ident, ident) == 0)) {
 
        do {
                if((elm->type & type) && (strcmp(elm->ident, ident) == 0)) {
index 82d986a6fa921f2921683c615d361be301041d5e..2e430f22fc6b57f152d63d98150b123cc4eda419 100644 (file)
@@ -15,7 +15,7 @@ static struct treenode *_new_plain(int op)
        new->parent = TREENULL;
        new->label = NULL;
        new->name = new->reg = (char *)NULL;
        new->parent = TREENULL;
        new->label = NULL;
        new->name = new->reg = (char *)NULL;
-       new->val = new->skip = new->exprcount = 0;
+       new->val = new->exprcount = 0;
        new->param_index = -1;
        return new;
 }
        new->param_index = -1;
        return new;
 }
index f88851f0d32076977f87bf17d6af5e6a0d932a53..2e38ed4d5be5b283c8283c328888da862d2e70bb 100644 (file)
@@ -10,39 +10,16 @@ typedef struct burm_state *STATEPTR_TYPE;
 #endif
 
 enum {
 #endif
 
 enum {
-       O_RET=1,
-       O_NULL,
-       O_SUB,
-       O_MUL,
-       O_OR,
-       O_LESS,
-       O_EQ,
-       O_ID,
-       O_ADD,
-       O_NUM,
-       O_FIELD,
-       O_MTWO,
-       O_MFOUR,
-       O_MEIGHT,
-       O_MONE
+       O_RET=1, O_NULL, O_SUB, O_MUL,
+       O_OR=5, O_LESS, O_EQ, O_ID, O_ADD,
+       O_NUM=10, O_FIELD, O_MTWO, O_MFOUR, O_MEIGHT,
+       O_MONE=15
 };
 
 static char *o_names[] = {
 };
 
 static char *o_names[] = {
-       "",
-       "O_RET",
-       "O_NULL",
-       "O_SUB",
-       "O_MUL",
-       "O_OR",
-       "O_LESS",
-       "O_EQ",
-       "O_ID",
-       "O_ADD",
-       "O_NUM",
-       "O_FIELD",
-       "O_MTWO",
-       "O_MFOUR",
-       "O_MEIGHT",
+       "", "O_RET", "O_NULL", "O_SUB", "O_MUL",
+       "O_OR", "O_LESS", "O_EQ", "O_ID", "O_ADD",
+       "O_NUM", "O_FIELD", "O_MTWO", "O_MFOUR", "O_MEIGHT",
        "O_MONE"
 };
 
        "O_MONE"
 };
 
@@ -54,7 +31,6 @@ struct treenode {
        long val;
        char *reg;
        struct treenode *parent;
        long val;
        char *reg;
        struct treenode *parent;
-       int skip;
        int param_index;
        int exprcount;
        int soffset;
        int param_index;
        int exprcount;
        int soffset;