Mercurial > hg > Members > kono > os9 > sbc09
diff a09.c @ 26:51a35f0347f6
fix label
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 11 Jul 2018 01:00:18 +0900 |
parents | c4e3abe97e2c |
children | 3c14d647bb51 |
line wrap: on
line diff
--- a/a09.c Tue Jul 10 15:38:58 2018 +0900 +++ b/a09.c Wed Jul 11 01:00:18 2018 +0900 @@ -180,6 +180,7 @@ int symcounter=0; int os9 = 0; // os9 flag int prevloc = 0; +struct symrecord * prevlp = 0; /* expression categories... ECORD all zeros is ordinary constant. @@ -893,6 +894,11 @@ void setlabel(struct symrecord * lp) { + if (prevlp) { + struct symrecord *l = prevlp; + prevlp = 0; + setlabel(l); + } if(lp) { if(lp->cat!=13&&lp->cat!=6) { if(lp->cat!=2||lp->value!=loccounter) @@ -1355,6 +1361,9 @@ if(isalnum(*srcptr)) { scanname();lp=findsym(namebuf); if(*srcptr==':') srcptr++; + if(lp && pass==2) { + oldlc = lp->value; + } } skipspace(); if(isalnum(*srcptr)) { @@ -1387,7 +1396,9 @@ if(c!=' '&&*(srcptr-1)!=' '&&c!=0&&c!=';')error|=2; } else error|=0x8000; - }else setlabel(lp); + } else { + prevlp = lp; // os9 mode label can be data or code + } if(pass==2) { outbuffer(); if(listing)outlist(); @@ -1530,6 +1541,7 @@ srcptr=srcline; if(suppress)suppressline(); else processline(); } + setlabel(0); // process prevlp fclose(srcfile); if(suppress) { fprintf(stderr,"improperly nested IF statements in %s",curname);