Add info about string expansions in error reports

This is especially useful when an EQUS expands to another one, to help
track them.
This is done separately from the file stack as the EQUS stack is separate
(which is itself because EQUS are managed *way* differently).
This commit is contained in:
ISSOtm
2019-09-12 09:57:01 +02:00
parent ccc666c1e4
commit 55fbecee49
4 changed files with 88 additions and 7 deletions

View File

@@ -43,6 +43,7 @@ void fstk_RunInclude(char *tzFileName);
void fstk_RunMacroArg(int32_t s);
void fstk_Init(char *s);
void fstk_Dump(void);
void fstk_DumpStringExpansions(void);
void fstk_AddIncludePath(char *s);
uint32_t fstk_RunMacro(char *s);
void fstk_RunRept(uint32_t count, int32_t nReptLineNo);

View File

@@ -262,6 +262,20 @@ void fstk_Dump(void)
fprintf(stderr, "%s(%d)", tzCurrentFileName, nLineNo);
}
/*
* Dump the string expansion stack to stderr
*/
void fstk_DumpStringExpansions(void)
{
const struct sStringExpansionPos *pExpansion = pCurrentStringExpansion;
while (pExpansion) {
fprintf(stderr, "while expanding symbol \"%s\"\n",
pExpansion->tzName);
pExpansion = pExpansion->pParent;
}
}
/*
* Extra includepath stuff
*/

View File

@@ -239,12 +239,13 @@ static void opt_ParseDefines(void)
*/
void verror(const char *fmt, va_list args)
{
fprintf(stderr, "ERROR: ");
fputs("ERROR: ", stderr);
fstk_Dump();
fprintf(stderr, ":\n ");
fputs(":\n ", stderr);
vfprintf(stderr, fmt, args);
fprintf(stderr, "\n");
nErrors += 1;
fputc('\n', stderr);
fstk_DumpStringExpansions();
nErrors++;
}
void yyerror(const char *fmt, ...)
@@ -276,11 +277,12 @@ void warning(const char *fmt, ...)
va_start(args, fmt);
fprintf(stderr, "warning: ");
fputs("warning: ", stderr);
fstk_Dump();
fprintf(stderr, ":\n ");
fputs(":\n ", stderr);
vfprintf(stderr, fmt, args);
fprintf(stderr, "\n");
fputc('\n', stderr);
fstk_DumpStringExpansions();
va_end(args);
}

View File

@@ -1,2 +1,66 @@
ERROR: equs-recursion.asm(2):
Recursion limit (64) exceeded
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"
while expanding symbol "recurse"