1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
use crate::nkgc::SymID; use crate::compile::Builtin; use std::borrow::Cow; pub trait SymDB { fn name(&self, sym: SymID) -> Cow<str>; fn put(&mut self, name: &str) -> SymID; } #[derive(Default, Clone, Debug)] pub struct StaticSymDB {} impl SymDB for StaticSymDB { fn name(&self, sym: SymID) -> Cow<str> { match Builtin::from_sym(sym) { Some(bt) => Cow::Borrowed(bt.get_str()), None => Cow::Owned(sym.to_string()) } } fn put(&mut self, name: &str) -> SymID { panic!("Attempted to create symbol `{}' in FmtSymID", name); } } pub const SYM_DB: StaticSymDB = StaticSymDB {};