From 0068c1375ca08a633c61c5c70201331a4fe15540 Mon Sep 17 00:00:00 2001 From: Rangi Date: Fri, 21 May 2021 17:09:23 -0400 Subject: [PATCH] Syntax error message hints to indent macro invocations This message is only printed for identifiers parsed as `T_LABEL` (since they're at the start of a line) but already defined as macros. Otherwise it may not be relevant, e.g. for `MyLabel;:` or `My Label::`. --- src/asm/parser.y | 9 +++++++++ test/asm/syntax-error-after-syntax-error.err | 2 ++ test/asm/syntax-error-after-syntax-error.simple.err | 2 ++ 3 files changed, 13 insertions(+) diff --git a/src/asm/parser.y b/src/asm/parser.y index a675d0a9..d435ff5b 100644 --- a/src/asm/parser.y +++ b/src/asm/parser.y @@ -688,6 +688,15 @@ line : plain_directive endofline fstk_StopRept(); yyerrok; } + | T_LABEL error endofline { /* Hint about unindented macros parsed as labels */ + struct Symbol *macro = sym_FindExactSymbol($1); + + if (macro && macro->type == SYM_MACRO) + fprintf(stderr, + " To invoke `%s` as a macro it must be indented\n", $1); + fstk_StopRept(); + yyerrok; + } ; /* diff --git a/test/asm/syntax-error-after-syntax-error.err b/test/asm/syntax-error-after-syntax-error.err index a7f4440f..088bd7b1 100644 --- a/test/asm/syntax-error-after-syntax-error.err +++ b/test/asm/syntax-error-after-syntax-error.err @@ -2,8 +2,10 @@ ERROR: syntax-error-after-syntax-error.asm(6): syntax error, unexpected newline ERROR: syntax-error-after-syntax-error.asm(7): syntax error, unexpected newline + To invoke `mac` as a macro it must be indented ERROR: syntax-error-after-syntax-error.asm(8): syntax error, unexpected number + To invoke `mac` as a macro it must be indented ERROR: syntax-error-after-syntax-error.asm(9): 'mac' already defined at syntax-error-after-syntax-error.asm(1) ERROR: syntax-error-after-syntax-error.asm(10): diff --git a/test/asm/syntax-error-after-syntax-error.simple.err b/test/asm/syntax-error-after-syntax-error.simple.err index 82278668..78a252ac 100644 --- a/test/asm/syntax-error-after-syntax-error.simple.err +++ b/test/asm/syntax-error-after-syntax-error.simple.err @@ -2,8 +2,10 @@ ERROR: syntax-error-after-syntax-error.asm(6): syntax error ERROR: syntax-error-after-syntax-error.asm(7): syntax error + To invoke `mac` as a macro it must be indented ERROR: syntax-error-after-syntax-error.asm(8): syntax error + To invoke `mac` as a macro it must be indented ERROR: syntax-error-after-syntax-error.asm(9): 'mac' already defined at syntax-error-after-syntax-error.asm(1) ERROR: syntax-error-after-syntax-error.asm(10):