]> Shamusworld >> Repos - rmac/blobdiff - token.c
Removed naked 'abs' (sans leading dot) from mntab.
[rmac] / token.c
diff --git a/token.c b/token.c
index cc754ab88e65e2f683977a09b44a24f8ba624e38..66399d6c5078e49be637ce3cdc86b4eb4a868526 100644 (file)
--- a/token.c
+++ b/token.c
@@ -554,6 +554,9 @@ DEBUG printf("ExM: SYMBOL=\"%s\"", d);
                                                        case DOTL:
                                                                d = ".l";
                                                                break;
+                                                       case CR_ABSCOUNT:
+                                                               d = "^^abscount";
+                                                               break;
                                                        case CR_DATE:
                                                                d = "^^date";
                                                                break;
@@ -676,8 +679,8 @@ int include(int handle, char * fname)
        INOBJ * inobj;
        FILEREC * fr;
 
-       // Verbose mode
-       if (verb_flag)
+       // Debug mode
+       if (debug)
                printf("[include: %s, cfileno=%u]\n", fname, cfileno);
 
        // Alloc and initialize include-descriptors
@@ -728,7 +731,10 @@ int fpop(void)
                // Pop IFENT levels until we reach the conditional assembly context we
                // were at when the input object was entered.
                while (ifent != inobj->in_ifent)
-                       d_endif();
+               {
+                       if (d_endif() != 0)                             // Something bad happened during endif parsing?
+                               return -1;                                      // If yes, bail instead of getting stuck in a loop
+               }
 
                tok = inobj->in_otok;                           // Restore tok and otok
                etok = inobj->in_etok;
@@ -736,21 +742,21 @@ int fpop(void)
                switch (inobj->in_type)
                {
                case SRC_IFILE:                                         // Pop and release an IFILE
-                       if (verb_flag)
+                       if (debug)
                                printf("[Leaving: %s]\n", curfname);
 
                        ifile = inobj->inobj.ifile;
                        ifile->if_link = f_ifile;
                        f_ifile = ifile;
                        close(ifile->ifhandle);                 // Close source file
-if (verb_flag) printf("[fpop (pre):  curfname=%s]\n", curfname);
+if (debug)     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);
+if (debug)     printf("[fpop (post): curfname=%s]\n", curfname);
+if (debug)     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);
+if (debug)     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;
@@ -905,9 +911,14 @@ retry:
        case SRC_IFILE:
                if ((ln = GetNextLine()) == NULL)
                {
-if (verb_flag) printf("TokenizeLine: Calling fpop() from SRC_IFILE...\n");
-                       fpop();                                                 // Pop input level
-                       goto retry;                                             // Try for more lines 
+if (debug) printf("TokenizeLine: Calling fpop() from SRC_IFILE...\n");
+                       if (fpop()==0)                                  // Pop input level
+                               goto retry;                                     // Try for more lines 
+                       else
+                       {
+                               ifent->if_prev = (IFENT *) - 1; //Signal Assemble() that we have reached EOF with unbalanced if/endifs
+                               return TKEOF;
+                       }
                }
 
                curlineno++;                                            // Bump line number
@@ -940,8 +951,10 @@ if (verb_flag) printf("TokenizeLine: Calling fpop() from SRC_IFILE...\n");
        case SRC_IMACRO:
                if ((ln = GetNextMacroLine()) == NULL)
                {
-                       ExitMacro();                                    // Exit macro (pop args, do fpop(), etc)
-                       goto retry;                                             // Try for more lines...
+                       if (ExitMacro() == 0)                   // Exit macro (pop args, do fpop(), etc)
+                               goto retry;                                     // Try for more lines...
+                       else
+                               return TKEOF;                           // Oops, we got a non zero return code, signal EOF
                }
 
                lntag = '@';
@@ -952,7 +965,7 @@ if (verb_flag) printf("TokenizeLine: Calling fpop() from SRC_IFILE...\n");
        case SRC_IREPT:
                if ((ln = GetNextRepeatLine()) == NULL)
                {
-if (verb_flag) printf("TokenizeLine: Calling fpop() from SRC_IREPT...\n");
+if (debug) printf("TokenizeLine: Calling fpop() from SRC_IREPT...\n");
                        fpop();
                        goto retry;
                }
@@ -1636,6 +1649,8 @@ void DumpTokenBuffer(void)
                        printf("[DOTI]");
                else if (*t == ENDEXPR)
                        printf("[ENDEXPR]");
+               else if (*t == CR_ABSCOUNT)
+                       printf("[CR_ABSCOUNT]");
                else if (*t == CR_DEFINED)
                        printf("[CR_DEFINED]");
                else if (*t == CR_REFERENCED)