use std::usize::MAX;
use std::{cmp, fmt};
#[derive(Copy, Clone)]
pub struct Span {
pub start: usize,
pub end: usize,
}
impl Span {
pub fn span(start: usize, end: usize) -> Span {
Span {
start: start,
end: end,
}
}
pub fn none() -> Span {
Span {
start: MAX,
end: MAX,
}
}
pub fn is_none(&self) -> bool {
self.start == MAX && self.end == MAX
}
}
impl cmp::PartialEq for Span {
fn eq(&self, other: &Self) -> bool {
(self.start == other.start && self.end == other.end) || self.is_none() || other.is_none()
}
}
impl fmt::Debug for Span {
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
if !self.is_none() {
write!(fmt, "{}…{}", self.start, self.end)
} else {
write!(fmt, "…")
}
}
}
#[derive(Debug, PartialEq, Clone)]
pub struct Node<T> {
pub node: T,
pub span: Span,
}
impl<T> Node<T> {
pub fn new(node: T, span: Span) -> Node<T> {
Node {
node: node,
span: span,
}
}
}