%type <yy_int> register propno att_list_el_type tokenset_no
%type <yy_int> adornlist optstar optuses optregvar regvartype optregvartype
%type <yy_int> emarg tokarg subreg allreg optsecondstring
-%type <yy_expr> expr
+%type <yy_expr> expr regvarexpr
%type <yy_iocc> tokeninstance
%type <yy_int> optexpr optexact optstack
%type <yy_set> tokenset
$$->vi_int[1]=$3;
cursetno = -1;
}
- ;
+ | regvarexpr
+ { NEW($$,struct varinfo);
+ $$->vi_next = 0;
+ $$->vi_int[0] = -($1.ex_index + 1);
+ $$->vi_int[1] = 0;
+ }
+ ;
+
allocates
: /* empty */
{ $$ = 0; nallreg=0;}
{ $$ = make_expr(TYPINT,EX_INREG,i_expr($3),0); }
| regvartype
{ $$ = make_expr(TYPINT,EX_CON, $1+1, 0); }
- | REGVAR '(' expr optregvartype ')'
+ | regvarexpr
+ ;
+
+regvarexpr
+ : REGVAR '(' expr optregvartype ')'
{ $$ = regvar_expr($3,$4); }
;
#define codeint(x) fprintf(code," %d",x)
#define codenl() fprintf(code,"\n")
#else
+#define codenl()
+#define code8nl(x) code8(x)
+
code8(x) {
codeindex++;
putc(x,code);
}
-code8nl(x) {
-
- code8(x);
-}
-
code53(x,y) {
code8(x+(y<<5));
}
}
-codenl() {
-}
#endif
int prevind=0;
int npatbytes= -1;
code53(DO_REMOVE,1);
codeint(vp->vi_int[0]);
codeint(vp->vi_int[1]);
- codenl();
- } else {
+ } else if (vp->vi_int[1] >= 0) {
code53(DO_REMOVE,0);
codeint(vp->vi_int[0]);
- codenl();
+ } else {
+ code8(DO_RREMOVE);
+ codeint(vp->vi_int[0]);
}
+ codenl();
}
nremoves=0;
for(vp=generates;vp!=0;vp=vp->vi_next) {