1
0
Fork 0

Add support for variables in interpreter

This commit is contained in:
Vili Sinervä 2025-02-03 18:01:39 +02:00
parent 520357d930
commit 1ed2ac97cc
No known key found for this signature in database
GPG key ID: DF8FEAF54EFAC996
4 changed files with 136 additions and 63 deletions

27
src/compiler/symtab.rs Normal file
View file

@ -0,0 +1,27 @@
use crate::compiler::value::Value;
use std::collections::HashMap;
#[derive(Default)]
pub struct SymTab<'source> {
pub locals: HashMap<&'source str, Value>,
pub parent: Option<Box<SymTab<'source>>>,
}
impl<'source> SymTab<'source> {
pub fn get(&mut self, symbol: &str) -> &mut Value {
if let Some(val) = self.locals.get_mut(symbol) {
val
} else if let Some(parent) = &mut self.parent {
parent.get(symbol)
} else {
panic!("No symbol {} found!", symbol);
}
}
pub fn new_global() -> SymTab<'source> {
SymTab {
locals: HashMap::new(),
parent: None,
}
}
}