Compiler: Fix #elseif handling not working as expected.
Improted from Pawn 3.1.3636. -- Example #define VAR 1 #if VAR == 1 // code #elseif VAR == 2 // code #endif -- Returns error(38).
This commit is contained in:
parent
c4b233d094
commit
65c29cafa0
@ -911,11 +911,27 @@ static int command(void)
|
|||||||
if ((ifstack[iflevel-1] & PARSEMODE)==PARSEMODE) {
|
if ((ifstack[iflevel-1] & PARSEMODE)==PARSEMODE) {
|
||||||
/* there has been a parse mode already on this level, so skip the rest */
|
/* there has been a parse mode already on this level, so skip the rest */
|
||||||
ifstack[iflevel-1] |= (char)SKIPMODE;
|
ifstack[iflevel-1] |= (char)SKIPMODE;
|
||||||
|
/* if we were already skipping this section, allow expressions with
|
||||||
|
* undefined symbols; otherwise check the expression to catch errors
|
||||||
|
*/
|
||||||
|
if (tok==tpELSEIF) {
|
||||||
|
if (skiplevel==iflevel)
|
||||||
|
preproc_expr(&val,NULL); /* get, but ignore the expression */
|
||||||
|
else
|
||||||
|
lptr=strchr(lptr,'\0');
|
||||||
|
} /* if */
|
||||||
} else {
|
} else {
|
||||||
/* previous conditions were all FALSE */
|
/* previous conditions were all FALSE */
|
||||||
if (tok==tpELSEIF) {
|
if (tok==tpELSEIF) {
|
||||||
/* get new expression */
|
/* if we were already skipping this section, allow expressions with
|
||||||
|
* undefined symbols; otherwise check the expression to catch errors
|
||||||
|
*/
|
||||||
|
if (skiplevel==iflevel) {
|
||||||
preproc_expr(&val,NULL); /* get value (or 0 on error) */
|
preproc_expr(&val,NULL); /* get value (or 0 on error) */
|
||||||
|
} else {
|
||||||
|
lptr=strchr(lptr,'\0');
|
||||||
|
val=0;
|
||||||
|
} /* if */
|
||||||
ifstack[iflevel-1]=(char)(val ? PARSEMODE : SKIPMODE);
|
ifstack[iflevel-1]=(char)(val ? PARSEMODE : SKIPMODE);
|
||||||
} else {
|
} else {
|
||||||
/* a simple #else, clear skip mode */
|
/* a simple #else, clear skip mode */
|
||||||
|
Loading…
Reference in New Issue
Block a user