pub(super) type Position = u32;
#[derive(PartialEq, Eq, Debug, Copy, Clone, Default)]
pub(crate) struct Span {
start: u32,
end: u32,
}
impl Span {
pub(super) fn inclusive(start: u32, end: u32) -> Span {
Span { start, end: end + 1 }
}
pub(super) fn single_char(position: u32) -> Span {
Span::inclusive(position, position)
}
pub(crate) fn start(&self) -> u32 {
self.start
}
pub(crate) fn end(&self) -> u32 {
self.end
}
}
#[derive(Debug, Clone)]
pub(super) struct Spanned<T> {
pub(super) contents: T,
span: Span,
}
impl<T> Spanned<T> {
pub(super) fn from_position(start: Position, end: Position, contents: T) -> Spanned<T> {
Spanned { span: Span::inclusive(start, end), contents }
}
pub(super) fn from(t_span: Span, contents: T) -> Spanned<T> {
Spanned { span: t_span, contents }
}
pub(super) fn span(&self) -> Span {
self.span
}
}