devalang_wasm/language/preprocessor/resolver/
driver.rs1use crate::language::preprocessor::resolver::value::resolve_value;
2use crate::language::syntax::ast::{Statement, StatementKind, Value};
3use std::collections::HashMap;
4
5pub 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 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 let resolved_value = resolve_value(&stmt.value, variables, 0);
49 Statement {
50 value: resolved_value,
51 ..stmt.clone()
52 }
53 }
54 }
55}