mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 18:22:07 +00:00
Correctly recover from syntax errors at the first token of a line (#1549)
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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)!
|
||||||
|
|||||||
@@ -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`
|
||||||
|
|||||||
@@ -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)!
|
||||||
|
|||||||
@@ -6,3 +6,4 @@ it's $2A
|
|||||||
it's $36
|
it's $36
|
||||||
args: elif
|
args: elif
|
||||||
args:
|
args:
|
||||||
|
forty-two!
|
||||||
|
|||||||
Reference in New Issue
Block a user