luau_parser/impl/block/
while_loop.rs

1//! All `impl` blocks for [`WhileLoop`].
2
3use luau_lexer::prelude::{Keyword, Lexer, ParseError, Token, TokenType};
4
5use crate::{
6    safe_unwrap,
7    types::{DoBlock, Expression, Parse, Pointer, TryParse, WhileLoop},
8};
9
10impl Parse for WhileLoop {
11    fn parse(
12        while_keyword: Token,
13        lexer: &mut Lexer,
14        errors: &mut Vec<ParseError>,
15    ) -> Option<Self> {
16        if while_keyword != TokenType::Keyword(Keyword::While) {
17            return None;
18        }
19
20        let condition = safe_unwrap!(
21            lexer,
22            errors,
23            "Expected <expr>",
24            Pointer::<Expression>::try_parse(lexer, errors)
25        );
26        let do_block = DoBlock::try_parse(lexer, errors)?;
27
28        Some(Self {
29            while_keyword,
30            condition,
31            do_block,
32        })
33    }
34}