///|
/// A half-open source range in a rule expression.
pub(all) struct Span {
start : Int
end : Int
} derive(Eq, Debug, ToJson, FromJson)
///|
pub fn Span::new(start : Int, end : Int) -> Span {
{ start, end }
}
///|
pub fn Span::merge(self : Span, other : Span) -> Span {
{
start: Int::min(self.start, other.start),
end: Int::max(self.end, other.end),
}
}
///|
pub fn Span::length(self : Span) -> Int {
self.end - self.start
}