mirror of
https://github.com/cc65/cc65.git
synced 2025-07-18 19:24:09 +00:00
Fix issue #1663.
This commit is contained in:
@@ -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:
|
||||||
|
Reference in New Issue
Block a user