From: ceriel Date: Fri, 15 Jul 1988 11:12:13 +0000 (+0000) Subject: fixed problem with temporary DEALLOCATES: sometimes a register was X-Git-Tag: release-5-5~3032 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=f0d3a648afb275805b0697f6223bac5c91931af4;p=ack.git fixed problem with temporary DEALLOCATES: sometimes a register was used for stacking, that was only temporarily deallocated --- diff --git a/mach/proto/ncg/codegen.c b/mach/proto/ncg/codegen.c index 692230133..9500a3689 100644 --- a/mach/proto/ncg/codegen.c +++ b/mach/proto/ncg/codegen.c @@ -569,7 +569,7 @@ normalfailed: if (stackpad!=tokpatlen) { do { npos=exactmatch=0; for(rpp=reglist[propno];rp= *rpp; rpp++) - if (getrefcount(rp-machregs)==0) { + if (getrefcount(rp-machregs, FALSE)==0) { pos[npos++] = rp-machregs; if (eqtoken(&rp->r_contents,&token)) exactmatch++; @@ -651,7 +651,7 @@ normalfailed: if (stackpad!=tokpatlen) { } } else { decision = forced; - if (getrefcount(decision)!=0) + if (getrefcount(decision, FALSE)!=0) BROKE(); token2.t_token = -1; } diff --git a/mach/proto/ncg/equiv.c b/mach/proto/ncg/equiv.c index 82c05e98e..ad1437f13 100644 --- a/mach/proto/ncg/equiv.c +++ b/mach/proto/ncg/equiv.c @@ -38,7 +38,7 @@ tuples(regls,nregneeded) rl_p *regls; { for (i=0;ir_members[0]==0) #endif - return(rp->r_refcount); + return(rp->r_refcount - (tflag ? rp->r_tcount : 0)); #if MAXMEMBERS!=0 else { maxcount=0; for (i=0;ir_members[i]!=0) - maxcount=max(maxcount,getrefcount(rp->r_members[i])); + maxcount=max(maxcount,getrefcount(rp->r_members[i], tflag)); return(maxcount); } #endif diff --git a/mach/proto/ncg/subr.c b/mach/proto/ncg/subr.c index 0f2905d8f..d7a4eec39 100644 --- a/mach/proto/ncg/subr.c +++ b/mach/proto/ncg/subr.c @@ -30,7 +30,7 @@ match(tp,tep,optexp) register token_p tp; register set_p tep; { if (tp->t_token == -1) { /* register frame */ bitno = tp->t_att[0].ar; if (tep->set_val[bitno>>4]&(1<<(bitno&017))) - if (tep->set_val[0]&1 || getrefcount(tp->t_att[0].ar)<=1) + if (tep->set_val[0]&1 || getrefcount(tp->t_att[0].ar, FALSE)<=1) goto oklabel; return(0); } else { /* token frame */ @@ -534,7 +534,7 @@ unsigned stackupto(limit,ply,toplevel) token_p limit; { if (cp->c1_prop>=0) { for (rpp=reglist[cp->c1_prop]; (rp = *rpp)!=0 && - getrefcount(rp-machregs)!=0; + getrefcount(rp-machregs, TRUE)!=0; rpp++) ; if (rp==0)