use crate::semantic_analysis::symbol::SymbolId; use std::collections::HashMap; use std::rc::Rc; pub type ScopeId = usize; #[derive(Debug, Clone)] pub struct Scope { parent_id: Option, symbols: HashMap, SymbolId>, } impl Scope { pub fn new(parent_id: Option) -> Self { Self { parent_id, symbols: HashMap::new(), } } pub fn parent_id(&self) -> Option { self.parent_id } pub fn has_symbol(&self, declared_name: &str) -> bool { self.symbols.contains_key(declared_name) } pub fn insert_symbol(&mut self, declared_name: Rc, symbol_id: SymbolId) { self.symbols.insert(declared_name, symbol_id); } pub fn get_symbol_id(&self, declared_name: &str) -> Option { self.symbols.get(declared_name).cloned() } }