Added a new operator for ncg: is_rom()
authorceriel <none@none>
Fri, 9 Feb 1990 16:34:17 +0000 (16:34 +0000)
committerceriel <none@none>
Fri, 9 Feb 1990 16:34:17 +0000 (16:34 +0000)
h/cgg_cg.h
mach/proto/ncg/compute.c
mach/proto/ncg/fillem.c
util/ncgg/cgg.y
util/ncgg/keywords

index c6717da..acc29f4 100644 (file)
@@ -129,6 +129,7 @@ typedef struct exprnode *node_p;
 #define EX_OR          41
 #define EX_XOR         42
 #define EX_AND         43
+#define EX_ISROM       44
 
 
 typedef struct {        /* to stack coercions */
index 60ff090..466ad00 100644 (file)
@@ -71,6 +71,7 @@ char opdesc[] = {
        LLDEF|RLDEF,            /* EX_OR */
        LLDEF|RLDEF,            /* EX_XOR */
        LLDEF|RLDEF,            /* EX_AND */
+       0,                      /* EX_ISROM */
 };
 
 string salloc(),strcpy(),strcat();
@@ -208,6 +209,13 @@ result_t compute(node) register node_p node; {
                        return(undefres);
                result.e_v.e_con = gp->gl_rom[node->ex_rnode];
                return(result);
+       case EX_ISROM:
+               leaf2=dollar[node->ex_lnode];
+               if (leaf2.e_typ != EV_ADDR)
+                       result.e_v.e_con = 0;
+               else
+                       result.e_v.e_con = lookglo(leaf2.e_v.e_addr.ea_str) != 0;
+               return(result);
        case EX_LOWW:
                result.e_v.e_con = saveemp[node->ex_lnode].em_u.em_loper&0xFFFF;
                return(result);
index 9b9d898..5a6a882 100644 (file)
@@ -279,7 +279,7 @@ dopseudo() {
                        }
                        break;
                }
-               if (rommask != 0) {
+               if (nromwords != 0) {
                        romcont[MAXROM]=rommask;
                        enterglo(labstr,romcont);
                }
index b51a49b..ab122e9 100644 (file)
@@ -75,7 +75,7 @@ iocc_t iops[20];
 %token FROM TO
 %token TEST MOVE STACK RETURN
 %token PATTERNS PAT WITH EXACT KILLS USES REUSING GEN YIELDS LEAVING
-%token DEFINED SAMESIGN SFIT UFIT ROM LOWW HIGHW
+%token DEFINED SAMESIGN SFIT UFIT ROM LOWW HIGHW ISROM
 %token CMPEQ CMPNE CMPLT CMPGT CMPLE CMPGE OR2 AND2 LSHIFT RSHIFT NOT COMP
 %token INREG REGVAR REG_ANY REG_FLOAT REG_LOOP REG_POINTER
 %token <yy_int> ADORNACCESS
@@ -1015,6 +1015,8 @@ expr
                { $$ = make_expr(TYPBOOL,EX_UFIT,i_expr($3),i_expr($5)); }
        | ROM '(' emarg ',' NUMBER ')'
                { $$ = make_expr(TYPINT,EX_ROM,$3-1,chkincl($5,1,3)-1); }
+       | ISROM '(' emarg ')'
+               { $$ = make_expr(TYPINT,EX_ISROM,$3-1,0); }
        | LOWW '(' emarg ')'
                { $$ = make_expr(TYPINT,EX_LOWW,$3-1,0); }
        | HIGHW '(' emarg ')'
index 48f6019..ea51833 100644 (file)
@@ -24,6 +24,7 @@ from  FROM
 gen    GEN
 highw  HIGHW
 inreg  INREG
+is_rom ISROM
 kills  KILLS
 leaving        LEAVING
 loww   LOWW