case DOTL:
d = ".l";
break;
+ case CR_ABSCOUNT:
+ d = "^^abscount";
+ break;
case CR_DATE:
d = "^^date";
break;
// 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;
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 = '@';
// Compare names (sleazo string compare)
// This string compare is not right. Doesn't check for lengths.
// (actually it does, but in a crappy, unclear way.)
-#ifndef _MSC_VER
- #warning "!!! Bad string comparison !!!"
-#else
- #pragma WARNING(!!!! Bad string comparison !!!)
-#endif
+WARNING(!!!! Bad string comparison !!!)
s1 = sym;
// s2 = (char *)(defln + 1) + 1;
s2 = defln->line;
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)