Correctly recover from syntax errors at the first token of a line (#1549)

This commit is contained in:
Sylvie
2024-10-22 15:01:44 -04:00
committed by GitHub
parent f048cbbb11
commit 7fcf4ba60f
5 changed files with 16 additions and 11 deletions

View File

@@ -404,6 +404,14 @@ asm_file: lines;
lines: lines:
%empty %empty
| lines diff_mark line | lines diff_mark line
// Continue parsing the next line on a syntax error
| error {
lexer_SetMode(LEXER_NORMAL);
lexer_ToggleStringExpansion(true);
} endofline {
fstk_StopRept();
yyerrok;
}
; ;
diff_mark: diff_mark:
@@ -425,14 +433,6 @@ diff_mark:
line: line:
plain_directive endofline plain_directive endofline
| line_directive // Directives that manage newlines themselves | line_directive // Directives that manage newlines themselves
// Continue parsing the next line on a syntax error
| error {
lexer_SetMode(LEXER_NORMAL);
lexer_ToggleStringExpansion(true);
} endofline {
fstk_StopRept();
yyerrok;
}
; ;
endofline: NEWLINE | EOB; endofline: NEWLINE | EOB;

View File

@@ -6,4 +6,6 @@ error: macro-syntax.asm(8):
'\1' cannot be used outside of a macro '\1' cannot be used outside of a macro
error: macro-syntax.asm(9): error: macro-syntax.asm(9):
syntax error, unexpected ENDM syntax error, unexpected ENDM
error: Assembly aborted (4 errors)! error: macro-syntax.asm(11):
"old" is not a macro
error: Assembly aborted (5 errors)!

View File

@@ -28,4 +28,4 @@ ENDM
mac2 elif, 6 * 7 ; this prints "it's $2A" because it skips the `\1` line and takes the `else` mac2 elif, 6 * 7 ; this prints "it's $2A" because it skips the `\1` line and takes the `else`
mac2 elif, 6 * 9 mac2 elif, 6 * 9
mac2 elif mac2 elif
mac2 mac2 ; this prints "args:" *and* "forty-two!" since it doesn't create an `elif`

View File

@@ -2,4 +2,6 @@ error: skip-expansions.asm(31) -> skip-expansions.asm::mac2(21):
Macro argument '\1' not defined Macro argument '\1' not defined
error: skip-expansions.asm(31) -> skip-expansions.asm::mac2(21): error: skip-expansions.asm(31) -> skip-expansions.asm::mac2(21):
syntax error, unexpected ( syntax error, unexpected (
error: Assembly aborted (2 errors)! error: skip-expansions.asm(31) -> skip-expansions.asm::mac2(21):
Macro argument '\2' not defined
error: Assembly aborted (3 errors)!

View File

@@ -6,3 +6,4 @@ it's $2A
it's $36 it's $36
args: elif args: elif
args: args:
forty-two!