devalang_core/core/preprocessor/resolver/
tempo.rs

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