use super::source::Span; #[derive(Clone, Debug)] pub enum Number { Integer(i64), Float(f64), } #[derive(Clone)] pub struct SpannedData { pub data: T, pub span: Span, } impl std::fmt::Debug for SpannedData where T: std::fmt::Debug, { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { self.data.fmt(f) } } type InnerIdentifier = internment::ArcIntern; #[derive(Clone)] pub struct Identifier(InnerIdentifier); impl Identifier { pub fn from_ref(identifier: &str) -> Self { Self(InnerIdentifier::from_ref(identifier)) } } impl std::fmt::Debug for Identifier { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.write_str("`")?; f.write_str(self.0.as_str())?; f.write_str("`") } }