devalang_core/core/parser/handler/identifier/
sleep.rs

1use devalang_types::Value;
2
3use crate::core::{
4    lexer::token::{Token, TokenKind},
5    parser::{
6        driver::Parser,
7        statement::{Statement, StatementKind},
8    },
9    store::global::GlobalStore,
10};
11
12pub fn parse_sleep_token(
13    parser: &mut Parser,
14    current_token: Token,
15    _global_store: &mut GlobalStore,
16) -> Statement {
17    parser.advance(); // consume "sleep"
18
19    let duration = if let Some(token) = parser.peek_clone() {
20        if token.kind == TokenKind::Number {
21            parser.advance();
22            token.lexeme.parse().unwrap_or(0.0)
23        } else {
24            return crate::core::parser::statement::error_from_token(
25                token,
26                "Expected number after 'sleep'".to_string(),
27            );
28        }
29    } else {
30        return crate::core::parser::statement::error_from_token(
31            current_token,
32            "Expected number after 'sleep'".to_string(),
33        );
34    };
35
36    Statement {
37        kind: StatementKind::Sleep,
38        value: Value::Number(duration),
39        indent: current_token.indent,
40        line: current_token.line,
41        column: current_token.column,
42    }
43}