From e5a1aead365a99f0dd961f9297ae9a6ce234081e Mon Sep 17 00:00:00 2001 From: ggn Date: Tue, 23 Jan 2018 14:46:00 +0200 Subject: [PATCH] When an error occurs inside a macro or rept, report the exact line, not the line the macro or rept was invoked --- error.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/error.c b/error.c index 5c9b8c9..13b3199 100644 --- a/error.c +++ b/error.c @@ -91,18 +91,24 @@ int error(const char * text, ...) if (listing > 0) ship_ln(buf); - switch (cur_inobj->in_type) + if (cur_inobj) { - case SRC_IFILE: - sprintf(buf1, "%s %d: Error: %s\n", curfname, curlineno, buf); - break; - case SRC_IMACRO: - sprintf(buf1, "%s %d: Error: %s\n", curfname, cur_inobj->inobj.imacro->im_macro->lineList->lineno, buf); - break; - case SRC_IREPT: - sprintf(buf1, "%s %d: Error: %s\n", curfname, cur_inobj->inobj.irept->lineno, buf); - break; + switch (cur_inobj->in_type) + { + case SRC_IFILE: + sprintf(buf1, "%s %d: Error: %s\n", curfname, curlineno, buf); + break; + case SRC_IMACRO: + sprintf(buf1, "%s %d: Error: %s\n", curfname, cur_inobj->inobj.imacro->im_macro->lineList->lineno, buf); + break; + case SRC_IREPT: + sprintf(buf1, "%s %d: Error: %s\n", curfname, cur_inobj->inobj.irept->lineno, buf); + break; + } } + else + // No current file so cur_inobj is NULL + sprintf(buf1, "%s %d: Error: %s\n", curfname, curlineno, buf); if (err_flag) unused = write(err_fd, buf1, (LONG)strlen(buf1)); -- 2.37.2