make to work with new em_code interface
authorceriel <none@none>
Mon, 15 Feb 1988 18:04:27 +0000 (18:04 +0000)
committerceriel <none@none>
Mon, 15 Feb 1988 18:04:27 +0000 (18:04 +0000)
lang/occam/comp/Makefile
lang/occam/comp/em.c
lang/occam/comp/expr.c

index d869d61..0d2335f 100644 (file)
@@ -1,6 +1,6 @@
 EMHOME =       ../../..
 MODLIB =       $(EMHOME)/modules/lib
-INCL =         -I$(EMHOME)/modules/h
+INCL =         -I$(EMHOME)/modules/h -I$(EMHOME)/h
 GFILES=                occam.g
 PRIMARY=       occam.o Lpars.o keytab.o lex.yy.o code.o em.o
 SECUNDARY=     symtab.o expr.o builtin.o
@@ -8,7 +8,8 @@ TERTIARY=       report.o
 LLOPT=
 LEXLIB=-ll
 LIBRARY=       $(MODLIB)/libem_mes.a $(MODLIB)/libemk.a \
-               $(MODLIB)/libprint.a $(MODLIB)/libstring.a \
+               $(MODLIB)/liballoc.a $(MODLIB)/libprint.a \
+               $(MODLIB)/libstring.a \
                $(MODLIB)/libsystem.a $(LEXLIB)
 CFLAGS =       -Dvoid=int -O $(INCL)
 LDFLAGS =      -i
index 22b1a22..c6bdb03 100644 (file)
@@ -195,18 +195,8 @@ void Loe(name, offset) char *name; int offset;
                C_loe_dnam(name, (arith) offset);
 }
 
-typedef int (*pfi)();
-
 static int operators[]=        { '<', '>', '=',  GE,  LE,  NE };
 
-extern C_blt(), C_bgt(), C_beq(), C_bge(), C_ble(), C_bne();
-extern C_tlt(), C_tgt(), C_teq(), C_tge(), C_tle(), C_tne();
-extern C_zlt(), C_zgt(), C_zeq(), C_zge(), C_zle(), C_zne();
-
-static pfi C_bxx[]= { C_blt, C_bgt, C_beq, C_bge, C_ble, C_bne };
-static pfi C_txx[]= { C_tlt, C_tgt, C_teq, C_tge, C_tle, C_tne };
-static pfi C_zxx[]= { C_zlt, C_zgt, C_zeq, C_zge, C_zle, C_zne };
-
 void bxx(pos, op, L) register pos, op, L;
 {
        register i;
@@ -223,35 +213,96 @@ void bxx(pos, op, L) register pos, op, L;
                if (pos && (i+=3)>=6) i-=6;
                if (vz>wz) {
                        C_cmi((arith) vz);
-                       (*C_zxx[i])((label) L);
+                       switch(i) {
+                       case 0:
+                               C_zlt((label) L);
+                               break;
+                       case 1:
+                               C_zgt((label) L);
+                               break;
+                       case 2:
+                               C_zeq((label) L);
+                               break;
+                       case 3:
+                               C_zge((label) L);
+                               break;
+                       case 4:
+                               C_zle((label) L);
+                               break;
+                       case 5:
+                               C_zne((label) L);
+                               break;
+                       }
                } else {
-                       (*C_bxx[i])((label) L);
+                       switch(i) {
+                       case 0:
+                               C_blt((label) L);
+                               break;
+                       case 1:
+                               C_bgt((label) L);
+                               break;
+                       case 2:
+                               C_beq((label) L);
+                               break;
+                       case 3:
+                               C_bge((label) L);
+                               break;
+                       case 4:
+                               C_ble((label) L);
+                               break;
+                       case 5:
+                               C_bne((label) L);
+                               break;
+                       }
                }
        }
 }
 
 void Txx(op) register int op;
 {
-       register i;
-
-       for (i=0; operators[i]!=op; i++) ;
-
-       (*C_txx[i])();
+       switch(op) {
+       case '<':
+               C_tlt();
+               break;
+       case '>':
+               C_tgt();
+               break;
+       case '=':
+               C_teq();
+               break;
+       case GE:
+               C_tge();
+               break;
+       case LE:
+               C_tle();
+               break;
+       case NE:
+               C_tne();
+               break;
+       }
        cwv();
        C_ngi((arith) vz);
 }
 
-extern C_adi(), C_sbi(), C_mli(), C_dvi(), C_rmi();
-
 void xxi(op) register op;
 {
-       static int operators[]= { '+',   '-',   '*',   '/',   BS };
-       static pfi C_xxi[]=     { C_adi, C_sbi, C_mli, C_dvi, C_rmi };
-       register i;
-
-       for (i=0; operators[i]!=op; i++) ;
-
-       (*C_xxi[i])((arith) vz);
+       switch(op) {
+       case '+':
+               C_adi((arith) vz);
+               break;
+       case '-':
+               C_sbi((arith) vz);
+               break;
+       case '*':
+               C_mli((arith) vz);
+               break;
+       case '/':
+               C_dvi((arith) vz);
+               break;
+       case BS:
+               C_rmi((arith) vz);
+               break;
+       }
 }
 
 void aar()                     {       C_aar((arith) wz); }
@@ -337,7 +388,7 @@ static void do_fil(f) struct ftree *f;
                dot_label(new_dot_label(&f->lab));
                C_rom_scon(f->file, (arith) (strlen(f->file)+1));
        }
-       C_fil_dlb((label) f->lab);
+       C_fil_dlb((label) f->lab, (arith) 0);
 }
 
 void fil()
@@ -377,21 +428,24 @@ int set_file(f) char *f;
 
 void par_begin()
 {
+       C_zer((arith) pz);
        C_lal((arith) curr_offset);
        C_cal("pc_begin");
-       C_asp((arith) pz);
+       C_asp((arith) (2*pz));
 }
 
 void par_fork(NONZERO) int *NONZERO;
 {
+       C_zer((arith) pz);
        C_cal("pc_fork");
+       C_asp(pz);
        C_lfr((arith) wz);
        C_zne((label) new_label(NONZERO));
 }
 
 void resumenext()
 {
-       C_cal("resumene");
+       C_cal("resumenext");
 }
 
 void no_deadlock()
index 4650764..b022f45 100644 (file)
@@ -27,7 +27,7 @@ struct expr *new_node(op, left, right, byte)
                register long lc, rc;
 
                lc=left->u.const;
-               rc=right->u.const;
+               if (right) rc=right->u.const; else rc = 0;
 
                switch (op) {
                case '+':       lc+=rc; break;