- return ASTNode(ASTAction.OR, parse_ast(comma_split[0], parse_expr), parse_ast(comma_split[1], parse_expr))
+ # Confusingly, BIRD uses `,` as either || or &&, depending on the type
+ # of expression being parsed. Specifically, a `numbers-match` uses `,`
+ # as OR, whereas a `bitmask-match` uses `,` as AND.
+ if comma_is_or:
+ return ASTNode(ASTAction.OR, parse_ast(comma_split[0], parse_expr, comma_is_or), parse_ast(comma_split[1], parse_expr, comma_is_or))
+ else:
+ return ASTNode(ASTAction.AND, parse_ast(comma_split[0], parse_expr, comma_is_or), parse_ast(comma_split[1], parse_expr, comma_is_or))