OR: xor (OR xor)* */
| 1155 | |
| 1156 | /* OR: xor (OR xor)* */ |
| 1157 | static cbm_expr_t *parse_or_expr(parser_t *p) { // NOLINT(misc-no-recursion) |
| 1158 | cbm_expr_t *left = parse_xor_expr(p); |
| 1159 | if (!left) { |
| 1160 | return NULL; |
| 1161 | } |
| 1162 | while (check(p, TOK_OR)) { |
| 1163 | advance(p); |
| 1164 | cbm_expr_t *right = parse_xor_expr(p); |
| 1165 | if (!right) { |
| 1166 | expr_free(left); |
| 1167 | return NULL; |
| 1168 | } |
| 1169 | left = expr_binary(EXPR_OR, left, right); |
| 1170 | } |
| 1171 | return left; |
| 1172 | } |
| 1173 | |
| 1174 | /* Parse WHERE clause — builds expression tree */ |
| 1175 | static int parse_where(parser_t *p, cbm_where_clause_t **out) { |
no test coverage detected