ref: cf992164f79a0e5c0fd49b445d698be2361a9b67
parent: b27b821e7f7bf1c3e0ce8c07cb047cca6cf09434
author: ISSOtm <[email protected]>
date: Sat Aug 15 11:10:32 EDT 2020
Fix lexer capture sometimes not being reset
--- a/src/asm/lexer.c
+++ b/src/asm/lexer.c
@@ -1674,7 +1674,7 @@
token = yylex();
if (token == 0) { /* Pass EOF through */
- return token;
+ break;
} else if (atLineStart && token == T_POP_IF) { /* Increase nesting */
nIFDepth++;
} else if (atLineStart && nIFDepth == startingDepth) { /* An occasion to finish? */
@@ -1811,6 +1811,7 @@
for (;;) {
if (c == EOF) {
error("Unterminated REPT block\n");
+ lexerState->capturing = false;
goto finish;
} else if (c == '\n') {
break;
@@ -1824,6 +1825,7 @@
}
finish:
+ assert(!lexerState->capturing);
*capture = captureStart;
*size = lexerState->captureSize - strlen("ENDR");
lexerState->captureBuf = NULL;
@@ -1847,6 +1849,7 @@
for (;;) {
if (c == EOF) {
error("Unterminated macro definition\n");
+ lexerState->capturing = false;
goto finish;
} else if (c == '\n') {
break;
@@ -1905,6 +1908,7 @@
}
finish:
+ assert(!lexerState->capturing);
*capture = captureStart;
*size = lexerState->captureSize - strlen("ENDM");
lexerState->captureBuf = NULL;