devalang_core/core/preprocessor/resolver/
bank.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_bank(
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    match &stmt.value {
18        Value::Identifier(ident) => {
19            if let Some(val) = module.variable_table.get(ident) {
20                new_stmt.value = val.clone();
21            } else {
22                let message = format!("Bank identifier '{ident}' not found in variable table");
23                logger.log_error_with_stacktrace(&message, &module.path);
24                new_stmt.kind = StatementKind::Error {
25                    message: message.clone(),
26                };
27                new_stmt.value = Value::Null;
28            }
29        }
30
31        Value::String(_) => {}
32
33        Value::Number(_) => {}
34
35        other => {
36            let message = format!(
37                "Expected a string or identifier for bank, found {:?}",
38                other
39            );
40            logger.log_error_with_stacktrace(&message, &module.path);
41            new_stmt.kind = StatementKind::Error {
42                message: "Expected a string or identifier for bank".to_string(),
43            };
44            new_stmt.value = Value::Null;
45        }
46    }
47
48    new_stmt
49}