Bug fixes
This commit is contained in:
parent
45238eea0f
commit
0b941ef495
|
@ -145,10 +145,10 @@ result_t compute(node) register node_p node; {
|
|||
switch(node->ex_operator) {
|
||||
default: assert(FALSE);
|
||||
case EX_TOKFIELD:
|
||||
if (node->ex_lnode!=0)
|
||||
tp = &fakestack[stackheight-node->ex_lnode];
|
||||
else
|
||||
tp = curtoken;
|
||||
if (node->ex_lnode==0)
|
||||
if (curtoken) tp = curtoken;
|
||||
else tp = &fakestack[stackheight-1];
|
||||
else tp = &fakestack[stackheight-node->ex_lnode];
|
||||
switch(result.e_typ = tokens[tp->t_token].t_type[node->ex_rnode-1]) {
|
||||
default:
|
||||
assert(FALSE);
|
||||
|
@ -343,7 +343,10 @@ result_t compute(node) register node_p node; {
|
|||
return(result);
|
||||
case EX_SUBREG:
|
||||
result.e_typ = EV_REG;
|
||||
tp= &fakestack[stackheight-node->ex_lnode];
|
||||
if (node->ex_lnode==0)
|
||||
if (curtoken) tp = curtoken;
|
||||
else tp = &fakestack[stackheight-1];
|
||||
else tp = &fakestack[stackheight-node->ex_lnode];
|
||||
assert(tp->t_token == -1);
|
||||
tmpreg= tp->t_att[0].ar;
|
||||
#if MAXMEMBERS!=0
|
||||
|
|
|
@ -96,12 +96,14 @@ string ad2str(ad) addr_t ad; {
|
|||
|
||||
praddr(ad) addr_t ad; {
|
||||
|
||||
if (ad.ea_str==0)
|
||||
if (ad.ea_str==0 || *(ad.ea_str) == '\0')
|
||||
fprintf(codefile,WRD_FMT,ad.ea_off);
|
||||
else {
|
||||
fprintf(codefile,"%s",ad.ea_str);
|
||||
if (ad.ea_off<0)
|
||||
fprintf(codefile,WRD_FMT,ad.ea_off);
|
||||
if (ad.ea_off<0) {
|
||||
fputc('-', codefile);
|
||||
fprintf(codefile,WRD_FMT,-ad.ea_off);
|
||||
}
|
||||
else if(ad.ea_off>0) {
|
||||
fputc('+',codefile);
|
||||
fprintf(codefile,WRD_FMT,ad.ea_off);
|
||||
|
|
|
@ -78,7 +78,10 @@ instance(instno,token) register token_p token; {
|
|||
default:
|
||||
assert(FALSE);
|
||||
case IN_COPY:
|
||||
tp= &fakestack[stackheight-inp->in_info[0]];
|
||||
if (inp->in_info[0] == 0)
|
||||
if (curtoken) tp = curtoken;
|
||||
else tp = &fakestack[stackheight-1];
|
||||
else tp= &fakestack[stackheight-inp->in_info[0]];
|
||||
if (inp->in_info[1]==0) {
|
||||
*token = *tp;
|
||||
} else {
|
||||
|
@ -93,7 +96,10 @@ instance(instno,token) register token_p token; {
|
|||
}
|
||||
return;
|
||||
case IN_MEMB:
|
||||
tp= &fakestack[stackheight-inp->in_info[0]];
|
||||
if (inp->in_info[0] == 0)
|
||||
if (curtoken) tp = curtoken;
|
||||
else tp = &fakestack[stackheight-1];
|
||||
else tp= &fakestack[stackheight-inp->in_info[0]];
|
||||
assert(inp->in_info[1]!=0);
|
||||
assert(tp->t_token>0);
|
||||
token->t_token= -1;
|
||||
|
@ -160,7 +166,7 @@ cinstance(instno,token,tp,regno) register token_p token,tp; {
|
|||
default:
|
||||
assert(FALSE);
|
||||
case IN_COPY:
|
||||
assert(inp->in_info[0] == 1);
|
||||
assert(inp->in_info[0] <= 1);
|
||||
if (inp->in_info[1]==0) {
|
||||
*token = *tp;
|
||||
} else {
|
||||
|
@ -175,7 +181,7 @@ cinstance(instno,token,tp,regno) register token_p token,tp; {
|
|||
}
|
||||
return;
|
||||
case IN_MEMB:
|
||||
assert(inp->in_info[0] == 1);
|
||||
assert(inp->in_info[0] <= 1);
|
||||
token->t_token= -1;
|
||||
assert(tp->t_token>0);
|
||||
assert(tokens[tp->t_token].t_type[inp->in_info[1]-1] == EV_REG);
|
||||
|
@ -197,14 +203,19 @@ cinstance(instno,token,tp,regno) register token_p token,tp; {
|
|||
#ifdef REGVARS
|
||||
case IN_S_DESCR:
|
||||
case IN_D_DESCR:
|
||||
result=compute(&enodes[inp->in_info[1]]);
|
||||
assert(result.e_typ==EV_INT);
|
||||
if ((regno=isregvar(result.e_v.e_con)) > 0) {
|
||||
token->t_token = -1;
|
||||
token->t_att[0].ar = regno;
|
||||
for(i=1;i<TOKENSIZE;i++)
|
||||
token->t_att[i].aw = 0;
|
||||
return;
|
||||
{ token_p ct = curtoken;
|
||||
|
||||
curtoken = tp;
|
||||
result=compute(&enodes[inp->in_info[1]]);
|
||||
curtoken = ct;
|
||||
assert(result.e_typ==EV_INT);
|
||||
if ((regno=isregvar(result.e_v.e_con)) > 0) {
|
||||
token->t_token = -1;
|
||||
token->t_att[0].ar = regno;
|
||||
for(i=1;i<TOKENSIZE;i++)
|
||||
token->t_att[i].aw = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
/* fall through */
|
||||
#endif
|
||||
|
@ -217,7 +228,11 @@ cinstance(instno,token,tp,regno) register token_p token,tp; {
|
|||
assert(tokens[token->t_token].t_type[i]==0);
|
||||
token->t_att[i].aw=0;
|
||||
} else {
|
||||
token_p ct = curtoken;
|
||||
|
||||
curtoken = tp;
|
||||
result=compute(&enodes[inp->in_info[i+1]]);
|
||||
curtoken = ct;
|
||||
assert(tokens[token->t_token].t_type[i]==result.e_typ);
|
||||
if (result.e_typ==EV_INT)
|
||||
token->t_att[i].aw=result.e_v.e_con;
|
||||
|
@ -605,12 +620,19 @@ itokcost() {
|
|||
|
||||
error(s,a1,a2,a3,a4,a5,a6,a7,a8) char *s; {
|
||||
|
||||
fatal(s,a1,a2,a3,a4,a5,a6,a7,a8);
|
||||
fprintf(stderr,"Error: ");
|
||||
fprintf(stderr,s,a1,a2,a3,a4,a5,a6,a7,a8);
|
||||
fprintf(stderr,"\n");
|
||||
#ifdef TABLEDEBUG
|
||||
ruletrace();
|
||||
#endif
|
||||
out_finish();
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
fatal(s,a1,a2,a3,a4,a5,a6,a7,a8) char *s; {
|
||||
|
||||
fprintf(stderr,"Error: ");
|
||||
fprintf(stderr,"Fatal: ");
|
||||
fprintf(stderr,s,a1,a2,a3,a4,a5,a6,a7,a8);
|
||||
fprintf(stderr,"\n");
|
||||
#ifdef TABLEDEBUG
|
||||
|
|
Loading…
Reference in a new issue