devalang_core/core/preprocessor/resolver/
tempo.rs1use 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 }
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}