OR: xor (OR xor)* */
| 1289 | |
| 1290 | /* OR: xor (OR xor)* */ |
| 1291 | static cbm_expr_t *parse_or_expr(parser_t *p) { // NOLINT(misc-no-recursion) |
| 1292 | cbm_expr_t *left = parse_xor_expr(p); |
| 1293 | if (!left) { |
| 1294 | return NULL; |
| 1295 | } |
| 1296 | while (check(p, TOK_OR)) { |
| 1297 | advance(p); |
| 1298 | cbm_expr_t *right = parse_xor_expr(p); |
| 1299 | if (!right) { |
| 1300 | expr_free(left); |
| 1301 | return NULL; |
| 1302 | } |
| 1303 | left = expr_binary(EXPR_OR, left, right); |
| 1304 | } |
| 1305 | return left; |
| 1306 | } |
| 1307 | |
| 1308 | /* Parse WHERE clause — builds expression tree */ |
| 1309 | static int parse_where(parser_t *p, cbm_where_clause_t **out) { |
no test coverage detected