1
0
mirror of https://github.com/cc65/cc65.git synced 2025-01-03 16:33:19 +00:00
This commit is contained in:
Kugel Fuhr 2024-09-01 10:42:18 +02:00
parent b688cfa0c0
commit 4b68d19993

View File

@ -133,24 +133,26 @@ static void SetIfCond (IfDesc* ID, int C)
static void ElseClause (IfDesc* ID, const char* Directive)
/* Enter an .ELSE clause */
static int ElseClause (IfDesc* ID, const char* Directive)
/* Enter an .ELSE clause. Return true if this was ok, zero on errors. */
{
/* Check if we have an open .IF - otherwise .ELSE is not allowed */
if (ID == 0) {
Error ("Unexpected %s", Directive);
return;
return 0;
}
/* Check for a duplicate else, then remember that we had one */
if (ID->Flags & ifElse) {
/* We already had a .ELSE ! */
Error ("Duplicate .ELSE");
return 0;
}
ID->Flags |= ifElse;
/* Condition is inverted now */
ID->Flags ^= ifCond;
return 1;
}
@ -226,8 +228,7 @@ void DoConditionals (void)
D = GetCurrentIf ();
/* Allow an .ELSE */
ElseClause (D, ".ELSE");
if (ElseClause (D, ".ELSE")) {
/* Remember the data for the .ELSE */
if (D) {
ReleaseFullLineInfo (&D->LineInfos);
@ -241,13 +242,16 @@ void DoConditionals (void)
/* Skip .ELSE */
NextTok ();
ExpectSep ();
} else {
/* Problem with .ELSE, ignore remainder of line */
SkipUntilSep ();
}
break;
case TOK_ELSEIF:
D = GetCurrentIf ();
/* Handle as if there was an .ELSE first */
ElseClause (D, ".ELSEIF");
if (ElseClause (D, ".ELSEIF")) {
/* Calculate the new overall if condition */
CalcOverallIfCond ();
@ -266,6 +270,10 @@ void DoConditionals (void)
/* Get the new overall condition */
CalcOverallIfCond ();
} else {
/* Problem with .ELSEIF, ignore remainder of line */
SkipUntilSep ();
}
break;
case TOK_ENDIF: