devalang_wasm/language/preprocessor/resolver/
driver.rs

1use crate::language::preprocessor::resolver::value::resolve_value;
2use crate::language::syntax::ast::{Statement, StatementKind, Value};
3use std::collections::HashMap;
4
5/// Main driver for statement resolution
6pub fn resolve_statement(stmt: &Statement, variables: &HashMap<String, Value>) -> Statement {
7    match &stmt.kind {
8        StatementKind::Trigger {
9            entity,
10            duration,
11            effects,
12        } => crate::language::preprocessor::resolver::trigger::resolve_trigger(
13            stmt, entity, duration, effects, variables,
14        ),
15        StatementKind::Let { name, value } => {
16            let resolved_value = value.as_ref().map(|v| resolve_value(v, variables, 0));
17            Statement::new(
18                StatementKind::Let {
19                    name: name.clone(),
20                    value: resolved_value,
21                },
22                Value::Null,
23                stmt.indent,
24                stmt.line,
25                stmt.column,
26            )
27        }
28        StatementKind::Bank { name, alias } => {
29            // Bank names might be identifiers - resolve them
30            let resolved_name = match resolve_value(&Value::String(name.clone()), variables, 0) {
31                Value::String(s) => s,
32                Value::Identifier(s) => s,
33                _ => name.clone(),
34            };
35            Statement::new(
36                StatementKind::Bank {
37                    name: resolved_name,
38                    alias: alias.clone(),
39                },
40                Value::Null,
41                stmt.indent,
42                stmt.line,
43                stmt.column,
44            )
45        }
46        _ => {
47            // For other statements, resolve the value field
48            let resolved_value = resolve_value(&stmt.value, variables, 0);
49            Statement {
50                value: resolved_value,
51                ..stmt.clone()
52            }
53        }
54    }
55}