54 lines
1.3 KiB
Rust
54 lines
1.3 KiB
Rust
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<str>,
|
|
declared_name_source_range: SourceRange,
|
|
type_info: Option<TypeInfo>,
|
|
ir_parameter: Option<Rc<IrParameter>>,
|
|
}
|
|
|
|
impl ParameterSymbol {
|
|
pub fn new(declared_name: &Rc<str>, 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<IrParameter>) {
|
|
self.ir_parameter = Some(ir_parameter);
|
|
}
|
|
|
|
pub fn ir_parameter(&self) -> &Rc<IrParameter> {
|
|
self.ir_parameter.as_ref().unwrap()
|
|
}
|
|
}
|
|
|
|
impl Symbol for ParameterSymbol {
|
|
fn declared_name(&self) -> &str {
|
|
&self.declared_name
|
|
}
|
|
|
|
fn declared_name_owned(&self) -> Rc<str> {
|
|
self.declared_name.clone()
|
|
}
|
|
|
|
fn declared_name_source_range(&self) -> &SourceRange {
|
|
&self.declared_name_source_range
|
|
}
|
|
}
|