mimium_lang/utils/metadata.rs
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
use crate::interner::{Symbol, ToSymbol};
pub type Span = std::ops::Range<usize>;
#[derive(Clone, Debug, PartialEq)]
pub struct Location {
pub span: Span,
pub path: Symbol,
}
impl Location {
pub fn new(span: Span, path: Symbol) -> Self {
Self { span, path }
}
}
impl Default for Location {
fn default() -> Self {
Self {
span: 0..0,
path: "".to_symbol(),
}
}
}
impl ariadne::Span for Location {
type SourceId = Symbol;
fn source(&self) -> &Self::SourceId {
&self.path
}
fn start(&self) -> usize {
self.span.start
}
fn end(&self) -> usize {
self.span.end
}
}
// #[derive(Clone, Debug, PartialEq)]
// pub struct WithMeta<T>{
// pub location: Span,
// pub value : T
// }
pub(crate) const GLOBAL_LABEL: &str = "_mimium_global";
// #[derive(Clone, Debug, PartialEq)]
// pub struct WithMeta<T: Clone + PartialEq>(pub T, pub Span);
// impl<T: Clone + PartialEq> WithMeta<T> {
// fn map<F, O>(self, f: F) -> WithMeta<O>
// where
// F: FnOnce(T) -> O,
// O: Clone + PartialEq,
// {
// WithMeta(f(self.0), self.1)
// }
// }