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