luau_parser/impl/block/
while_loop.rs

1//! All `impl` blocks for [`WhileLoop`].
2
3use luau_lexer::prelude::{Error, Keyword, Lexer, 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(while_keyword: Token, lexer: &mut Lexer, errors: &mut Vec<Error>) -> Option<Self> {
12        if while_keyword != TokenType::Keyword(Keyword::While) {
13            return None;
14        }
15
16        let condition = safe_unwrap!(
17            lexer,
18            errors,
19            "Expected <expr>",
20            Pointer::<Expression>::try_parse(lexer, errors)
21        );
22        let do_block = DoBlock::try_parse(lexer, errors)?;
23
24        Some(Self {
25            while_keyword,
26            condition,
27            do_block,
28        })
29    }
30}