32 lines
747 B
Rust
32 lines
747 B
Rust
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
|
|
pub struct SourceId(pub u32);
|
|
|
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
|
|
pub struct Span {
|
|
pub source: SourceId,
|
|
pub start: u32,
|
|
pub end: u32,
|
|
}
|
|
|
|
impl Span {
|
|
pub const fn new(source: SourceId, start: usize, end: usize) -> Self {
|
|
Self {
|
|
source,
|
|
start: start as u32,
|
|
end: end as u32,
|
|
}
|
|
}
|
|
|
|
pub const fn empty(source: SourceId, offset: usize) -> Self {
|
|
Self::new(source, offset, offset)
|
|
}
|
|
|
|
pub fn join(self, other: Self) -> Self {
|
|
Self {
|
|
source: self.source,
|
|
start: self.start.min(other.start),
|
|
end: self.end.max(other.end),
|
|
}
|
|
}
|
|
}
|