X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=token.c;h=a1d3be8203501a32bb1c5420a6251918aed6f0e9;hp=f30db090dc2d217907ee2a7b09a70413bf02e728;hb=94c8d392f2216452ad20956690658d76094ab50c;hpb=daf2f61a3664329ae7f9609e1e14da2b8780fd10 diff --git a/token.c b/token.c index f30db09..a1d3be8 100644 --- a/token.c +++ b/token.c @@ -116,20 +116,91 @@ static char * riscregname[] = { }; +// Removing this, provided it doesn't cause unwanted side-effects :-P +#if 0 // // Make `fnum' the Current `curfname' +// NOTE: This is currently only called from error() in error.c // void setfnum(WORD fnum) { - FILEREC * fr; +#if 0 + // NOTE: fnum is ZERO based, this can cause problems if you're not careful! + FILEREC * fr = filerec; - for(fr=filerec; fr!=NULL && fnum--; fr=fr->frec_next); + DEBUG printf("[setfnum: fnum=%u]\n", fnum); + + // Advance to the correct record... + while (fr != NULL && fnum != 0) + { + fr = fr->frec_next; + fnum--; + } if (fr == NULL) curfname = "(*top*)"; else curfname = fr->frec_name; + + DEBUG printf("[setfnum: curfname=%s]\n", curfname); +#else + // Check for absolute top filename (this should never happen) + if (fnum == -1) + { + curfname = "(*top*)"; + return; + } + + FILEREC * fr = filerec; + + // Advance to the correct record... + while (fr != NULL && fnum != 0) + { + fr = fr->frec_next; + fnum--; + } + + // Check for file # record not found (this should never happen either) + if (fr == NULL) + { + curfname = "(*NOT FOUND*)"; + return; + } + + curfname = fr->frec_name; +#endif } +#else +void SetFilenameForErrorReporting(void) +{ + WORD fnum = cfileno; + + // Check for absolute top filename (this should never happen) + if (fnum == -1) + { + curfname = "(*top*)"; + return; + } + + FILEREC * fr = filerec; + + // Advance to the correct record... + while (fr != NULL && fnum != 0) + { + fr = fr->frec_next; + fnum--; + } + + // Check for file # record not found (this should never happen either) + if (fr == NULL) + { + curfname = "(*NOT FOUND*)"; + return; + } + + curfname = fr->frec_name; +} +#endif // @@ -634,7 +705,7 @@ int include(int handle, char * fname) // Verbose mode if (verb_flag) - printf("[Including: %s]\n", fname); + printf("[include: %s, cfileno=%u]\n", fname, cfileno); // Alloc and initialize include-descriptors inobj = a_inobj(SRC_IFILE); @@ -645,12 +716,14 @@ int include(int handle, char * fname) ifile->ifoldlineno = curlineno; // Save old line number ifile->ifoldfname = curfname; // Save old filename ifile->ifno = cfileno; // Save old file number - cfileno = filecount++; // Compute new file number + +// cfileno = filecount++; // Compute new file number + // NB: This *must* be preincrement, we're adding one to the filecount here! + cfileno = ++filecount; // Compute NEW file number curfname = strdup(fname); // Set current filename (alloc storage) curlineno = 0; // Start on line zero // Add another file to the file-record -// fr = (FILEREC *)amem((LONG)sizeof(FILEREC)); fr = (FILEREC *)malloc(sizeof(FILEREC)); fr->frec_next = NULL; fr->frec_name = curfname; @@ -661,6 +734,7 @@ int include(int handle, char * fname) last_fr->frec_next = fr; // Append to list of filerecs last_fr = fr; + DEBUG printf("[include: curfname: %s, cfileno=%u]\n", curfname, cfileno); return OK; } @@ -747,10 +821,14 @@ int fpop(void) ifile->if_link = f_ifile; f_ifile = ifile; close(ifile->ifhandle); // Close source file +if (verb_flag) printf("[fpop (pre): curfname=%s]\n", curfname); curfname = ifile->ifoldfname; // Set current filename +if (verb_flag) printf("[fpop (post): curfname=%s]\n", curfname); +if (verb_flag) printf("[fpop: (pre) cfileno=%d ifile->ifno=%d]\n", (int)cfileno, (int)ifile->ifno); curlineno = ifile->ifoldlineno; // Set current line# DEBUG printf("cfileno=%d ifile->ifno=%d\n", (int)cfileno, (int)ifile->ifno); cfileno = ifile->ifno; // Restore current file number +if (verb_flag) printf("[fpop: (post) cfileno=%d ifile->ifno=%d]\n", (int)cfileno, (int)ifile->ifno); break; case SRC_IMACRO: // Pop and release an IMACRO imacro = inobj->inobj.imacro; @@ -899,6 +977,7 @@ int tokln(void) case SRC_IFILE: if ((ln = getln()) == NULL) { +if (verb_flag) printf("tokln: Calling fpop() from SRC_IFILE...\n"); fpop(); // Pop input level goto retry; // Try for more lines } @@ -945,6 +1024,7 @@ int tokln(void) case SRC_IREPT: if ((ln = getrln()) == NULL) { +if (verb_flag) printf("tokln: Calling fpop() from SRC_IREPT...\n"); fpop(); goto retry; }