jetcrab\parser\literals/
new.rs

1use crate::ast::{NewExpression, Node};
2use crate::lexer::TokenKind;
3use crate::parser::error::ParseResult;
4use crate::parser::Parser;
5
6impl Parser {
7    pub fn parse_new_expression(&mut self) -> ParseResult<Node> {
8        self.advance();
9
10        let callee = Box::new(self.parse_primary_expression()?);
11
12        let arguments = if self.check(TokenKind::LeftParen) {
13            self.advance();
14            let args = self.parse_arguments()?;
15            self.expect(TokenKind::RightParen)?;
16            args
17        } else {
18            Vec::new()
19        };
20
21        let span = self.create_span_from_tokens();
22        Ok(Node::NewExpression(NewExpression {
23            callee,
24            arguments,
25            span: Some(span),
26        }))
27    }
28}