devalang_core/core/preprocessor/resolver/
tempo.rs

1use crate::core::{
2    parser::statement::{Statement, StatementKind},
3    preprocessor::module::Module,
4    store::global::GlobalStore,
5};
6use devalang_types::Value;
7use devalang_utils::logger::Logger;
8
9pub fn resolve_tempo(
10    stmt: &Statement,
11    module: &Module,
12    _path: &str,
13    _global_store: &GlobalStore,
14) -> Statement {
15    let mut new_stmt = stmt.clone();
16    let logger = Logger::new();
17
18    match &stmt.value {
19        Value::Identifier(ident) => {
20            if let Some(val) = module.variable_table.get(ident) {
21                new_stmt.value = val.clone();
22            } else {
23                let message = format!("Tempo identifier '{ident}' not found in variable table");
24                logger.log_error_with_stacktrace(&message, &module.path);
25                new_stmt.kind = StatementKind::Error { message };
26                new_stmt.value = Value::Null;
27            }
28        }
29
30        Value::Number(_) => {
31            // Already resolved, no modification needed
32        }
33
34        other => {
35            let message = format!(
36                "Expected a number or identifier for tempo, found {:?}",
37                other
38            );
39            logger.log_error_with_stacktrace(&message, &module.path);
40            new_stmt.kind = StatementKind::Error {
41                message: "Expected a number or identifier for tempo".to_string(),
42            };
43            new_stmt.value = Value::Null;
44        }
45    }
46
47    new_stmt
48}