luau_parser/impl/block/
while_loop.rs1use 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}