use crate::symbol::class_symbol::ClassSymbol; use crate::symbol::constructor_symbol::ConstructorSymbol; use crate::symbol::field_symbol::FieldSymbol; use crate::symbol::function_symbol::FunctionSymbol; use std::cell::RefCell; use std::collections::HashMap; use std::rc::Rc; pub struct ClassScope { debug_name: String, parent_id: usize, class_symbols: HashMap, Rc>>, field_symbols: HashMap, Rc>>, function_symbols: HashMap, Rc>>, constructor_symbol: Option>>, } impl ClassScope { pub fn new(debug_name: &str, parent_id: usize) -> Self { Self { debug_name: debug_name.into(), parent_id, class_symbols: HashMap::new(), field_symbols: HashMap::new(), function_symbols: HashMap::new(), constructor_symbol: None, } } pub fn class_symbols(&self) -> &HashMap, Rc>> { &self.class_symbols } pub fn class_symbols_mut(&mut self) -> &mut HashMap, Rc>> { &mut self.class_symbols } pub fn field_symbols(&self) -> &HashMap, Rc>> { &self.field_symbols } pub fn field_symbols_mut(&mut self) -> &mut HashMap, Rc>> { &mut self.field_symbols } 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 constructor_symbol(&self) -> Option<&Rc>> { self.constructor_symbol.as_ref() } pub fn constructor_symbol_mut(&mut self) -> &mut Option>> { &mut self.constructor_symbol } pub fn parent_id(&self) -> usize { self.parent_id } }