jetcrab\parser\expressions/
comparison.rs1use 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}