AND: not (AND not)* */
| 1253 | |
| 1254 | /* AND: not (AND not)* */ |
| 1255 | static cbm_expr_t *parse_and_expr(parser_t *p) { // NOLINT(misc-no-recursion) |
| 1256 | cbm_expr_t *left = parse_not_expr(p); |
| 1257 | if (!left) { |
| 1258 | return NULL; |
| 1259 | } |
| 1260 | while (check(p, TOK_AND)) { |
| 1261 | advance(p); |
| 1262 | cbm_expr_t *right = parse_not_expr(p); |
| 1263 | if (!right) { |
| 1264 | expr_free(left); |
| 1265 | return NULL; |
| 1266 | } |
| 1267 | left = expr_binary(EXPR_AND, left, right); |
| 1268 | } |
| 1269 | return left; |
| 1270 | } |
| 1271 | |
| 1272 | /* XOR: and (XOR and)* */ |
| 1273 | static cbm_expr_t *parse_xor_expr(parser_t *p) { // NOLINT(misc-no-recursion) |
no test coverage detected