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 {};