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