jetcrab\parser\expressions/
comparison.rs

1use crate::ast::{BinaryExpression, Node};
2use crate::parser::error::ParseResult;
3use crate::parser::Parser;
4
5impl Parser {
6    pub fn parse_relational_expression(&mut self) -> ParseResult<Node> {
7        let mut left = self.parse_shift_expression()?;
8
9        while self.is_relational_operator() {
10            let operator = self.current_token_string();
11            self.advance();
12            let right = Box::new(self.parse_shift_expression()?);
13
14            let span = self.create_span_from_tokens();
15            left = Node::BinaryExpression(BinaryExpression {
16                left: Box::new(left),
17                operator,
18                right,
19                span: Some(span),
20            });
21        }
22
23        Ok(left)
24    }
25
26    pub fn parse_shift_expression(&mut self) -> ParseResult<Node> {
27        let mut left = self.parse_additive_expression()?;
28
29        while self.is_shift_operator() {
30            let operator = self.current_token_string();
31            self.advance();
32            let right = Box::new(self.parse_additive_expression()?);
33
34            let span = self.create_span_from_tokens();
35            left = Node::BinaryExpression(BinaryExpression {
36                left: Box::new(left),
37                operator,
38                right,
39                span: Some(span),
40            });
41        }
42
43        Ok(left)
44    }
45}