@@ -102,7 +102,8 @@ class IncludedFileInfo:
102102
103103precedence = (
104104 ("nonassoc" , "DUMMY" ),
105- ("left" , "AND" , "OR" ),
105+ ("left" , "OR" ),
106+ ("left" , "AND" ),
106107 ("left" , "EQ" , "NE" , "LT" , "LE" , "GT" , "GE" ),
107108 ("right" , "LLP" ),
108109 ("left" , "PASTE" , "STRINGIZING" ),
@@ -262,6 +263,22 @@ def expand_macros(macros: List[Any], lineno: int) -> Optional[str]:
262263 return tmp
263264
264265
266+ def to_bool (expr : Union [str , bool , int ]) -> int :
267+ if isinstance (expr , str ) and expr .isdigit ():
268+ expr = int (expr )
269+
270+ return int (bool (expr ))
271+
272+
273+ def to_int (expr : Union [str , int ]) -> int :
274+ if isinstance (expr , str ) and expr .isdigit ():
275+ expr = int (expr )
276+ else :
277+ expr = 0
278+
279+ return expr
280+
281+
265282# -------- GRAMMAR RULES for the preprocessor ---------
266283def p_start (p ):
267284 """start : program"""
@@ -655,12 +672,12 @@ def p_expr_str(p):
655672
656673def p_exprand (p ):
657674 """expr : expr AND expr"""
658- p [0 ] = "1" if p [1 ] and p [3 ] else "0"
675+ p [0 ] = "1" if to_bool ( p [1 ]) and to_bool ( p [3 ]) else "0"
659676
660677
661678def p_expror (p ):
662679 """expr : expr OR expr"""
663- p [0 ] = "1" if p [1 ] or p [3 ] else "0"
680+ p [0 ] = "1" if to_bool ( p [1 ]) or to_bool ( p [3 ]) else "0"
664681
665682
666683def p_exprne (p ):
@@ -675,34 +692,22 @@ def p_expreq(p):
675692
676693def p_exprlt (p ):
677694 """expr : expr LT expr"""
678- a = int (p [1 ]) if p [1 ].isdigit () else 0
679- b = int (p [3 ]) if p [3 ].isdigit () else 0
680-
681- p [0 ] = "1" if a < b else "0"
695+ p [0 ] = "1" if to_int (p [1 ]) < to_int (p [3 ]) else "0"
682696
683697
684698def p_exprle (p ):
685699 """expr : expr LE expr"""
686- a = int (p [1 ]) if p [1 ].isdigit () else 0
687- b = int (p [3 ]) if p [3 ].isdigit () else 0
688-
689- p [0 ] = "1" if a <= b else "0"
700+ p [0 ] = "1" if to_int (p [1 ]) <= to_int (p [3 ]) else "0"
690701
691702
692703def p_exprgt (p ):
693704 """expr : expr GT expr"""
694- a = int (p [1 ]) if p [1 ].isdigit () else 0
695- b = int (p [3 ]) if p [3 ].isdigit () else 0
696-
697- p [0 ] = "1" if a > b else "0"
705+ p [0 ] = "1" if to_int (p [1 ]) > to_int (p [3 ]) else "0"
698706
699707
700708def p_exprge (p ):
701709 """expr : expr GE expr"""
702- a = int (p [1 ]) if p [1 ].isdigit () else 0
703- b = int (p [3 ]) if p [3 ].isdigit () else 0
704-
705- p [0 ] = "1" if a >= b else "0"
710+ p [0 ] = "1" if to_int (p [1 ]) >= to_int (p [3 ]) else "0"
706711
707712
708713def p_expr_par (p ):
0 commit comments