34 lines
1.2 KiB
Rust
34 lines
1.2 KiB
Rust
use crate::name_analysis::symbol::{ClassMemberSymbol, ClassSymbol, FunctionSymbol, ParameterSymbol, Symbol, VariableSymbol};
|
|
use std::cell::RefCell;
|
|
use std::rc::Rc;
|
|
|
|
pub enum ExpressibleSymbol {
|
|
Class(Rc<RefCell<ClassSymbol>>),
|
|
Function(Rc<RefCell<FunctionSymbol>>),
|
|
ClassMember(Rc<RefCell<ClassMemberSymbol>>),
|
|
Parameter(Rc<RefCell<ParameterSymbol>>),
|
|
Variable(Rc<RefCell<VariableSymbol>>),
|
|
}
|
|
|
|
impl ExpressibleSymbol {
|
|
pub fn to_symbol(self) -> Rc<RefCell<dyn Symbol>> {
|
|
match self {
|
|
ExpressibleSymbol::Class(class_symbol) => {
|
|
class_symbol as Rc<RefCell<dyn Symbol>>
|
|
}
|
|
ExpressibleSymbol::Function(function_symbol) => {
|
|
function_symbol as Rc<RefCell<dyn Symbol>>
|
|
}
|
|
ExpressibleSymbol::ClassMember(class_member_symbol) => {
|
|
class_member_symbol as Rc<RefCell<dyn Symbol>>
|
|
}
|
|
ExpressibleSymbol::Parameter(parameter_symbol) => {
|
|
parameter_symbol as Rc<RefCell<dyn Symbol>>
|
|
}
|
|
ExpressibleSymbol::Variable(variable_symbol) => {
|
|
variable_symbol as Rc<RefCell<dyn Symbol>>
|
|
}
|
|
}
|
|
}
|
|
}
|