Fix nested if statements that don't have following whitespace

When trying to skip over nested if statements, if there was no whitespace
after an "if", then that "if" would not be recognized. That's a problem since
"if(" and "if{" are also valid ways to start an if statement. This change
will make it so that they are recognized correctly.
This commit is contained in:
dbrotz committed 2019-08-29 12:37:59 -07:00
1 parent 3a1b47129e
commit 8f287eeef9
4 files changed
+26 -2

No files matched your search

+8 -2
View File
@@ -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 @@ static void copymacro(void)
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)
+18
View File
@@ -0,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
View File
Whitespace-only changes.
View File
Whitespace-only changes.