use crate::ir::ir_parameter::IrParameter; use crate::source_range::SourceRange; use crate::symbol::Symbol; use crate::type_info::TypeInfo; use std::rc::Rc; pub struct ParameterSymbol { declared_name: Rc, declared_name_source_range: SourceRange, type_info: Option, ir_parameter: Option>, } impl ParameterSymbol { pub fn new(declared_name: &Rc, declared_name_source_range: SourceRange) -> Self { Self { declared_name: declared_name.clone(), declared_name_source_range, type_info: None, ir_parameter: None, } } pub fn set_type_info(&mut self, type_info: TypeInfo) { self.type_info = Some(type_info); } pub fn type_info(&self) -> &TypeInfo { self.type_info.as_ref().unwrap() } pub fn set_ir_parameter(&mut self, ir_parameter: Rc) { self.ir_parameter = Some(ir_parameter); } pub fn ir_parameter(&self) -> &Rc { self.ir_parameter.as_ref().unwrap() } } impl Symbol for ParameterSymbol { fn declared_name(&self) -> &str { &self.declared_name } fn declared_name_owned(&self) -> Rc { self.declared_name.clone() } fn declared_name_source_range(&self) -> &SourceRange { &self.declared_name_source_range } }