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