1#[derive(Clone, Copy, Debug, PartialEq, Eq)]
3pub struct Span {
4 pub file_id: u16,
5 pub start: u32,
6 pub end: u32,
7}
8
9impl Span {
10 pub fn new(file_id: u16, start: u32, end: u32) -> Self {
11 Self {
12 file_id,
13 start,
14 end,
15 }
16 }
17
18 pub fn dummy() -> Self {
19 Self {
20 file_id: 0,
21 start: 0,
22 end: 0,
23 }
24 }
25
26 pub fn merge(self, other: Span) -> Span {
27 debug_assert_eq!(self.file_id, other.file_id);
28 Span {
29 file_id: self.file_id,
30 start: self.start.min(other.start),
31 end: self.end.max(other.end),
32 }
33 }
34}
35
36#[derive(Clone, Debug)]
38pub struct Spanned<T> {
39 pub node: T,
40 pub span: Span,
41}
42
43impl<T> Spanned<T> {
44 pub fn new(node: T, span: Span) -> Self {
45 Self { node, span }
46 }
47
48 pub fn dummy(node: T) -> Self {
49 Self {
50 node,
51 span: Span::dummy(),
52 }
53 }
54
55}