shithub: rgbds

Download patch

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;