deimos-lang/dmc-lib/src/semantic_analysis/scope.rs
2026-09-04 21:14:12 -05:00

37 lines
873 B
Rust

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<ScopeId>,
symbols: HashMap<Rc<str>, SymbolId>,
}
impl Scope {
pub fn new(parent_id: Option<ScopeId>) -> Self {
Self {
parent_id,
symbols: HashMap::new(),
}
}
pub fn parent_id(&self) -> Option<ScopeId> {
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<str>, symbol_id: SymbolId) {
self.symbols.insert(declared_name, symbol_id);
}
pub fn get_symbol_id(&self, declared_name: &str) -> Option<SymbolId> {
self.symbols.get(declared_name).cloned()
}
}