mirror of
https://github.com/gbdev/rgbds.git
synced 2026-05-08 10:59:36 +00:00
Fix else working incorrectly from macros
Since the "skip ELSE blocks" variable is global, it used to get carried over from the macro's `if` to the outer's.
This commit is contained in:
+8
-7
@@ -39,7 +39,7 @@ uint32_t nListCountEmpty;
|
||||
char *tzNewMacro;
|
||||
uint32_t ulNewMacroSize;
|
||||
int32_t nPCOffset;
|
||||
bool executedIfBlock; /* If this is set, ELIFs cannot be executed anymore */
|
||||
bool executeElseBlock; /* If this is set, ELIFs cannot be executed anymore */
|
||||
|
||||
static uint32_t str2int2(uint8_t *s, int32_t length)
|
||||
{
|
||||
@@ -360,8 +360,8 @@ conditional : if
|
||||
|
||||
if : T_POP_IF const '\n' {
|
||||
nIFDepth++;
|
||||
executedIfBlock = !!$2;
|
||||
if (!executedIfBlock)
|
||||
executeElseBlock = !$2;
|
||||
if (executeElseBlock)
|
||||
lexer_SetMode(LEXER_SKIP_TO_ELIF);
|
||||
}
|
||||
;
|
||||
@@ -370,11 +370,11 @@ elif : T_POP_ELIF const '\n' {
|
||||
if (nIFDepth <= 0)
|
||||
fatalerror("Found ELIF outside an IF construct\n");
|
||||
|
||||
if (executedIfBlock) {
|
||||
if (!executeElseBlock) {
|
||||
lexer_SetMode(LEXER_SKIP_TO_ENDC);
|
||||
} else {
|
||||
executedIfBlock = !!$2;
|
||||
if (!executedIfBlock)
|
||||
executeElseBlock = !$2;
|
||||
if (executeElseBlock)
|
||||
lexer_SetMode(LEXER_SKIP_TO_ELIF);
|
||||
}
|
||||
}
|
||||
@@ -384,7 +384,7 @@ else : T_POP_ELSE '\n' {
|
||||
if (nIFDepth <= 0)
|
||||
fatalerror("Found ELSE outside an IF construct\n");
|
||||
|
||||
if (executedIfBlock)
|
||||
if (!executeElseBlock)
|
||||
lexer_SetMode(LEXER_SKIP_TO_ENDC);
|
||||
}
|
||||
;
|
||||
@@ -394,6 +394,7 @@ endc : T_POP_ENDC '\n' {
|
||||
fatalerror("Found ENDC outside an IF construct\n");
|
||||
|
||||
nIFDepth--;
|
||||
executeElseBlock = false;
|
||||
}
|
||||
;
|
||||
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
m: macro
|
||||
if 0
|
||||
WARN "3"
|
||||
else
|
||||
WARN "5"
|
||||
endc
|
||||
endm
|
||||
|
||||
if 1
|
||||
m
|
||||
else
|
||||
WARN "12"
|
||||
endc
|
||||
@@ -0,0 +1,2 @@
|
||||
warning: if-macro.asm(10) -> if-macro.asm::m(5): [-Wuser]
|
||||
5
|
||||
Reference in New Issue
Block a user