shithub: rgbds

Download patch

ref: 3cc7981c82883a91abd46d4afcb8205dcabdf2ea
parent: ce05cb5683d42c587252d444807b0301a63d4d4c
parent: 8f287eeef94454eafe411a168f53bc5f606bab02
author: Eldred Habert <[email protected]>
date: Thu Aug 29 18:06:10 EDT 2019

Merge pull request #402 from dbrotz/fix-386

Fix nested if statements that don't have following whitespace

--- a/src/asm/asmy.y
+++ b/src/asm/asmy.y
@@ -9,6 +9,7 @@
 %{
 #include <ctype.h>
 #include <errno.h>
+#include <stdbool.h>
 #include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -289,16 +290,21 @@
 	yyskipbytes(ulNewMacroSize + 4);
 }
 
+static bool endsIf(char c)
+{
+	return isWhiteSpace(c) || c == '(' || c == '{';
+}
+
 static uint32_t isIf(char *s)
 {
 	return (strncasecmp(s, "IF", 2) == 0)
-		&& isWhiteSpace(s[-1]) && isWhiteSpace(s[2]);
+		&& isWhiteSpace(s[-1]) && endsIf(s[2]);
 }
 
 static uint32_t isElif(char *s)
 {
 	return (strncasecmp(s, "ELIF", 4) == 0)
-		&& isWhiteSpace(s[-1]) && isWhiteSpace(s[4]);
+		&& isWhiteSpace(s[-1]) && endsIf(s[4]);
 }
 
 static uint32_t isElse(char *s)
--- /dev/null
+++ b/test/asm/nested-if.asm
@@ -1,0 +1,18 @@
+if 0
+	if(1)
+	endc
+	if 1
+	endc
+	if{x}
+	endc
+endc
+
+if 1
+else
+	if(1)
+	endc
+	if 1
+	endc
+	if{x}
+	endc
+endc