jetcrab\parser\expressions/
logical.rs1use crate::ast::{LogicalExpression, Node};
2use crate::lexer::TokenKind;
3use crate::parser::error::ParseResult;
4use crate::parser::Parser;
5
6impl Parser {
7 pub fn parse_logical_or_expression(&mut self) -> ParseResult<Node> {
8 let mut left = self.parse_logical_and_expression()?;
9
10 while self.check(TokenKind::LogicalOr) || self.check(TokenKind::NullishCoalescing) {
11 let operator = self.current_token_string();
12 self.advance();
13 let right = Box::new(self.parse_logical_and_expression()?);
14
15 let span = self.create_span_from_tokens();
16 left = Node::LogicalExpression(LogicalExpression {
17 left: Box::new(left),
18 operator,
19 right,
20 span: Some(span),
21 });
22 }
23
24 Ok(left)
25 }
26
27 pub fn parse_logical_and_expression(&mut self) -> ParseResult<Node> {
28 let mut left = self.parse_equality_expression()?;
29
30 while self.check(TokenKind::LogicalAnd) {
31 let operator = self.current_token_string();
32 self.advance();
33 let right = Box::new(self.parse_equality_expression()?);
34
35 let span = self.create_span_from_tokens();
36 left = Node::LogicalExpression(LogicalExpression {
37 left: Box::new(left),
38 operator,
39 right,
40 span: Some(span),
41 });
42 }
43
44 Ok(left)
45 }
46}