mirror of
https://github.com/cc65/cc65.git
synced 2025-01-03 16:33:19 +00:00
Fix issue #1663.
This commit is contained in:
parent
b688cfa0c0
commit
4b68d19993
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user