31 lines
1.1 KiB
Rust
31 lines
1.1 KiB
Rust
use crate::name_analysis::symbol::class_symbol::ClassSymbol;
|
|
use crate::name_analysis::symbol::function_symbol::FunctionSymbol;
|
|
use crate::name_analysis::symbol::interface_symbol::InterfaceSymbol;
|
|
use crate::name_analysis::symbol::module_symbol::ModuleSymbol;
|
|
use crate::name_analysis::symbol::Symbol;
|
|
use std::cell::RefCell;
|
|
use std::rc::Rc;
|
|
|
|
#[derive(Debug)]
|
|
pub enum ModuleLevelSymbol {
|
|
Module(Rc<RefCell<ModuleSymbol>>),
|
|
Interface(Rc<RefCell<InterfaceSymbol>>),
|
|
Class(Rc<RefCell<ClassSymbol>>),
|
|
Function(Rc<RefCell<FunctionSymbol>>),
|
|
}
|
|
|
|
impl ModuleLevelSymbol {
|
|
pub fn to_symbol(self) -> Rc<RefCell<dyn Symbol>> {
|
|
match self {
|
|
ModuleLevelSymbol::Module(module_symbol) => module_symbol as Rc<RefCell<dyn Symbol>>,
|
|
ModuleLevelSymbol::Interface(interface_symbol) => {
|
|
interface_symbol as Rc<RefCell<dyn Symbol>>
|
|
}
|
|
ModuleLevelSymbol::Class(class_symbol) => class_symbol as Rc<RefCell<dyn Symbol>>,
|
|
ModuleLevelSymbol::Function(function_symbol) => {
|
|
function_symbol as Rc<RefCell<dyn Symbol>>
|
|
}
|
|
}
|
|
}
|
|
}
|