(tokens: &[String], pos: &mut usize)
| 135 | // ── Recursive Descent Parser ──────────────────────────────────────────── |
| 136 | |
| 137 | fn parse_or_expr(tokens: &[String], pos: &mut usize) -> Result<RlsPredicate, PredicateParseError> { |
| 138 | let mut left = parse_and_expr(tokens, pos)?; |
| 139 | |
| 140 | while *pos < tokens.len() && tokens[*pos].to_uppercase() == "OR" { |
| 141 | *pos += 1; |
| 142 | let right = parse_and_expr(tokens, pos)?; |
| 143 | left = match left { |
| 144 | RlsPredicate::Or(mut children) => { |
| 145 | children.push(right); |
| 146 | RlsPredicate::Or(children) |
| 147 | } |
| 148 | _ => RlsPredicate::Or(vec![left, right]), |
| 149 | }; |
| 150 | } |
| 151 | |
| 152 | Ok(left) |
| 153 | } |
| 154 | |
| 155 | fn parse_and_expr(tokens: &[String], pos: &mut usize) -> Result<RlsPredicate, PredicateParseError> { |
| 156 | let mut left = parse_atom(tokens, pos)?; |
no test coverage detected