deimos-lang/src/name_analysis/symbol/class_symbol.rs
2025-10-27 08:48:08 -05:00

41 lines
1.2 KiB
Rust

use crate::name_analysis::symbol::class_member_symbol::ClassMemberSymbol;
use crate::name_analysis::symbol::function_symbol::FunctionSymbol;
use crate::name_analysis::symbol::source_definition::SourceDefinition;
use crate::name_analysis::symbol::Symbol;
use std::cell::RefCell;
use std::collections::HashMap;
use std::rc::Rc;
#[derive(Debug)]
pub struct ClassSymbol {
fqn_parts: Vec<Rc<str>>,
members: HashMap<Rc<str>, Rc<RefCell<ClassMemberSymbol>>>,
functions: HashMap<Rc<str>, Rc<RefCell<FunctionSymbol>>>,
source_definition: Option<SourceDefinition>,
}
impl ClassSymbol {
pub fn new(fqn_parts: &[Rc<str>], source_definition: Option<SourceDefinition>) -> Self {
Self {
fqn_parts: fqn_parts.to_vec(),
members: HashMap::new(),
functions: HashMap::new(),
source_definition,
}
}
pub fn declared_name(&self) -> &str {
self.fqn_parts.last().unwrap()
}
pub fn declared_name_owned(&self) -> Rc<str> {
self.fqn_parts.last().unwrap().clone()
}
}
impl Symbol for ClassSymbol {
fn source_definition(&self) -> Option<&SourceDefinition> {
self.source_definition.as_ref()
}
}