devalang_core/core/store/
variable.rs

1use std::collections::HashMap;
2
3use devalang_types::Value;
4
5#[derive(Debug, Default, Clone, PartialEq)]
6pub struct VariableTable {
7    pub variables: HashMap<String, Value>,
8    pub parent: Option<Box<VariableTable>>,
9}
10
11impl VariableTable {
12    pub fn new() -> Self {
13        VariableTable {
14            variables: HashMap::new(),
15            parent: None,
16        }
17    }
18
19    pub fn set(&mut self, name: String, value: Value) {
20        self.variables.insert(name, value);
21    }
22
23    pub fn with_parent(parent: VariableTable) -> Self {
24        Self {
25            variables: HashMap::new(),
26            parent: Some(Box::new(parent)),
27        }
28    }
29
30    pub fn get(&self, name: &str) -> Option<&Value> {
31        self.variables.get(name)
32    }
33
34    pub fn remove(&mut self, name: &str) -> Option<Value> {
35        self.variables.remove(name)
36    }
37}