use crate::symbol::{FunctionSymbol, ParameterSymbol, VariableSymbol}; use std::cell::RefCell; use std::collections::HashMap; use std::rc::Rc; pub struct Scope { debug_name: String, parent_id: Option, function_symbols: HashMap, Rc>>, parameter_symbols: HashMap, Rc>>, variable_symbols: HashMap, Rc>>, } impl Scope { pub fn new(debug_name: &str, parent_id: Option) -> Self { Self { debug_name: debug_name.into(), parent_id, function_symbols: HashMap::new(), parameter_symbols: HashMap::new(), variable_symbols: HashMap::new(), } } pub fn function_symbols(&self) -> &HashMap, Rc>> { &self.function_symbols } pub fn function_symbols_mut(&mut self) -> &mut HashMap, Rc>> { &mut self.function_symbols } pub fn parameter_symbols(&self) -> &HashMap, Rc>> { &self.parameter_symbols } pub fn parameter_symbols_mut(&mut self) -> &mut HashMap, Rc>> { &mut self.parameter_symbols } pub fn variable_symbols(&self) -> &HashMap, Rc>> { &self.variable_symbols } pub fn variable_symbols_mut(&mut self) -> &mut HashMap, Rc>> { &mut self.variable_symbols } pub fn parent_id(&self) -> Option { self.parent_id } }