use crate::source_range::SourceRange; use crate::symbol::Symbol; use std::hash::{Hash, Hasher}; use std::rc::Rc; pub struct ParameterSymbol { declared_name: Rc, declared_name_source_range: SourceRange, scope_id: usize, } impl ParameterSymbol { pub fn new( declared_name: &Rc, declared_name_source_range: SourceRange, scope_id: usize, ) -> Self { Self { declared_name: declared_name.clone(), declared_name_source_range, scope_id, } } pub fn declared_name(&self) -> &str { &self.declared_name } pub fn declared_name_owned(&self) -> Rc { self.declared_name.clone() } pub fn declared_name_source_range(&self) -> &SourceRange { &self.declared_name_source_range } pub fn scope_id(&self) -> usize { self.scope_id } } impl Eq for ParameterSymbol {} impl PartialEq for ParameterSymbol { fn eq(&self, other: &Self) -> bool { self.declared_name == other.declared_name && self.scope_id == other.scope_id } } impl Hash for ParameterSymbol { fn hash(&self, state: &mut H) { self.declared_name.hash(state); self.scope_id.hash(state); } }