X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=token.c;h=77fec1efbeac0071594df0dbd22de787d8b02dd8;hp=66399d6c5078e49be637ce3cdc86b4eb4a868526;hb=e968236d060c7dbae1647d5f54b27d4070b63b06;hpb=1d8c5b2261388e34637a41f82104718fdd06044b diff --git a/token.c b/token.c index 66399d6..77fec1e 100644 --- a/token.c +++ b/token.c @@ -24,7 +24,7 @@ int mjump_align = 0; // mjump alignment flag char lntag; // Line tag char * curfname; // Current filename char tolowertab[128]; // Uppercase ==> lowercase -char hextab[128]; // Table of hex values +int8_t hextab[128]; // Table of hex values char dotxtab[128]; // Table for ".b", ".s", etc. char irbuf[LNSIZ]; // Text for .rept block line char lnbuf[LNSIZ]; // Text of current line @@ -730,18 +730,26 @@ int fpop(void) { // Pop IFENT levels until we reach the conditional assembly context we // were at when the input object was entered. + int numUnmatched = 0; + while (ifent != inobj->in_ifent) { - if (d_endif() != 0) // Something bad happened during endif parsing? - return -1; // If yes, bail instead of getting stuck in a loop + if (d_endif() != 0) // Something bad happened during endif parsing? + return -1; // If yes, bail instead of getting stuck in a loop + + numUnmatched++; } - tok = inobj->in_otok; // Restore tok and otok + // Give a warning to the user that we had to wipe their bum for them + if (numUnmatched > 0) + warni("missing %d .endif(s)", numUnmatched); + + tok = inobj->in_otok; // Restore tok and otok etok = inobj->in_etok; switch (inobj->in_type) { - case SRC_IFILE: // Pop and release an IFILE + case SRC_IFILE: // Pop and release an IFILE if (debug) printf("[Leaving: %s]\n", curfname); @@ -912,7 +920,7 @@ retry: if ((ln = GetNextLine()) == NULL) { if (debug) printf("TokenizeLine: Calling fpop() from SRC_IFILE...\n"); - if (fpop()==0) // Pop input level + if (fpop() == 0) // Pop input level goto retry; // Try for more lines else { @@ -1213,12 +1221,12 @@ if (debug) printf("TokenizeLine: Calling fpop() from SRC_IREPT...\n"); *p++ = EOS; continue; case '$': // $, hex constant - if ((int)chrtab[*ln] & HDIGIT) + if (chrtab[*ln] & HDIGIT) { v = 0; // Parse the hex value - while ((int)hextab[*ln] >= 0) + while (hextab[*ln] >= 0) v = (v << 4) + (int)hextab[*ln++]; // ggn: Okay, some comments here are in order I think....