Skip to main content

luaur_ast/methods/
parser_parse_expr_list.rs

1use crate::records::ast_expr::AstExpr;
2use crate::records::lexeme::Type;
3use crate::records::parser::Parser;
4use crate::records::position::Position;
5use crate::records::temp_vector::TempVector;
6
7impl Parser {
8    pub fn parse_expr_list(
9        &mut self,
10        result: &mut TempVector<'_, *mut AstExpr>,
11        mut comma_positions: Option<&mut TempVector<'_, Position>>,
12    ) {
13        result.push_back(self.parse_expr_i32(0));
14
15        while self.lexer.current().r#type == Type(',' as i32) {
16            if let Some(ref mut positions) = comma_positions {
17                positions.push_back(self.lexer.current().location.begin);
18            }
19
20            self.next_lexeme();
21
22            if self.lexer.current().r#type == Type(')' as i32) {
23                self.report(
24                    self.lexer.current().location,
25                    format_args!("Expected expression after ',' but got ')' instead"),
26                );
27                break;
28            }
29
30            result.push_back(self.parse_expr_i32(0));
31        }
32    }
33}