XOR: and (XOR and)* */
| 1137 | |
| 1138 | /* XOR: and (XOR and)* */ |
| 1139 | static cbm_expr_t *parse_xor_expr(parser_t *p) { // NOLINT(misc-no-recursion) |
| 1140 | cbm_expr_t *left = parse_and_expr(p); |
| 1141 | if (!left) { |
| 1142 | return NULL; |
| 1143 | } |
| 1144 | while (check(p, TOK_XOR)) { |
| 1145 | advance(p); |
| 1146 | cbm_expr_t *right = parse_and_expr(p); |
| 1147 | if (!right) { |
| 1148 | expr_free(left); |
| 1149 | return NULL; |
| 1150 | } |
| 1151 | left = expr_binary(EXPR_XOR, left, right); |
| 1152 | } |
| 1153 | return left; |
| 1154 | } |
| 1155 | |
| 1156 | /* OR: xor (OR xor)* */ |
| 1157 | static cbm_expr_t *parse_or_expr(parser_t *p) { // NOLINT(misc-no-recursion) |
no test coverage detected