Skip to content

Commit 8140ea8

Browse files
committed
Move Spanned into source module
1 parent 37eaba6 commit 8140ea8

File tree

6 files changed

+48
-40
lines changed

6 files changed

+48
-40
lines changed

fathom/src/core/binary.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ use std::fmt::Debug;
77
use std::slice::SliceIndex;
88
use std::sync::Arc;
99

10-
use crate::core::semantics::{self, ArcValue, Elim, Head, Spanned, Value};
10+
use crate::core::semantics::{self, ArcValue, Elim, Head, Value};
1111
use crate::core::{Const, Prim, UIntStyle};
1212
use crate::env::{EnvLen, SliceEnv};
13-
use crate::source::Span;
13+
use crate::source::{Span, Spanned};
1414

1515
#[derive(Clone, Debug)]
1616
pub enum ReadError<'arena> {

fathom/src/core/semantics.rs

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -8,44 +8,13 @@ use std::sync::Arc;
88
use crate::alloc::SliceVec;
99
use crate::core::{Const, EntryInfo, Prim, Term, UIntStyle};
1010
use crate::env::{EnvLen, GlobalVar, SharedEnv, SliceEnv};
11-
use crate::source::Span;
11+
use crate::source::{Span, Spanned};
1212
use crate::StringId;
1313

1414
/// Atomically reference counted values. We use reference counting to increase
1515
/// the amount of sharing we can achieve during evaluation.
1616
pub type ArcValue<'arena> = Spanned<Arc<Value<'arena>>>;
1717

18-
#[derive(Debug, Clone)]
19-
pub struct Spanned<T> {
20-
pub span: Span,
21-
pub inner: T,
22-
}
23-
24-
impl<T> Spanned<T> {
25-
pub fn span(&self) -> Span {
26-
self.span
27-
}
28-
29-
pub fn empty(inner: T) -> Self {
30-
Spanned {
31-
span: Span::Empty,
32-
inner,
33-
}
34-
}
35-
36-
/// Merge the supplied span and the span of value and return value wrapped in that span.
37-
pub fn merge(span: Span, other: Spanned<T>) -> Spanned<T> {
38-
let Spanned {
39-
span: other_span,
40-
inner,
41-
} = other;
42-
Spanned {
43-
span: span.merge(&other_span),
44-
inner,
45-
}
46-
}
47-
}
48-
4918
impl<'arena> ArcValue<'arena> {
5019
pub fn match_prim_spine(&self) -> Option<(Prim, &[Elim<'arena>])> {
5120
self.inner.match_prim_spine()

fathom/src/driver.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ use std::path::Path;
77

88
use crate::core::binary;
99
use crate::core::binary::{BufferError, ReadError};
10-
use crate::core::semantics::Spanned;
11-
use crate::source::{ByteRange, FileId, Span};
10+
use crate::source::{ByteRange, FileId, Span, Spanned};
1211
use crate::surface::{self, elaboration};
1312
use crate::{StringInterner, BUG_REPORT_URL};
1413

fathom/src/source.rs

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,41 @@
1+
use std::ops::Deref;
2+
13
///! Types related to source files.
24
35
/// File id.
46
pub type FileId = usize; // TODO: use wrapper struct
57

6-
// TODO: Better name?
8+
#[derive(Debug, Clone)]
9+
pub struct Spanned<T> {
10+
pub span: Span,
11+
pub inner: T,
12+
}
13+
14+
impl<T> Spanned<T> {
15+
pub fn span(&self) -> Span {
16+
self.span
17+
}
18+
19+
pub fn empty(inner: T) -> Self {
20+
Spanned {
21+
span: Span::Empty,
22+
inner,
23+
}
24+
}
25+
26+
/// Merge the supplied span and the span of value and return value wrapped in that span.
27+
pub fn merge(span: Span, other: Spanned<T>) -> Spanned<T> {
28+
let Spanned {
29+
span: other_span,
30+
inner,
31+
} = other;
32+
Spanned {
33+
span: span.merge(&other_span),
34+
inner,
35+
}
36+
}
37+
}
38+
739
#[derive(Debug, Copy, Clone)]
840
pub enum Span {
941
Range(ByteRange),
@@ -14,6 +46,13 @@ impl Span {
1446
pub const fn fixme() -> Span {
1547
Span::Empty
1648
}
49+
50+
pub fn merge(&self, other: &Span) -> Span {
51+
match (self, other) {
52+
(Span::Range(a), Span::Range(b)) => a.merge(b).map(Span::Range).unwrap_or(Span::Empty),
53+
(_, _) => Span::Empty,
54+
}
55+
}
1756
}
1857

1958
impl From<&ByteRange> for Span {

fathom/src/surface/elaboration.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ use std::str::FromStr;
2626
use std::sync::Arc;
2727

2828
use crate::alloc::SliceVec;
29-
use crate::core::semantics::{self, ArcValue, Closure, Head, Spanned, Telescope, Value};
29+
use crate::core::semantics::{self, ArcValue, Closure, Head, Telescope, Value};
3030
use crate::core::{self, binary, Const, Prim, UIntStyle};
3131
use crate::env::{self, EnvLen, GlobalVar, SharedEnv, SliceEnv, UniqueEnv};
32-
use crate::source::{ByteRange, Span};
32+
use crate::source::{ByteRange, Span, Spanned};
3333
use crate::surface::elaboration::reporting::Message;
3434
use crate::surface::{distillation, pretty, BinOp, FormatField, Item, Module, Pattern, Term};
3535
use crate::{StringId, StringInterner};

fathom/src/surface/elaboration/unification.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,11 @@ use std::sync::Arc;
2020

2121
use crate::alloc::SliceVec;
2222
use crate::core::semantics::{
23-
self, ArcValue, Closure, Elim, Head, Spanned, SplitBranches, Telescope, Value,
23+
self, ArcValue, Closure, Elim, Head, SplitBranches, Telescope, Value,
2424
};
2525
use crate::core::{Prim, Term};
2626
use crate::env::{EnvLen, GlobalVar, LocalVar, SharedEnv, SliceEnv, UniqueEnv};
27+
use crate::source::Spanned;
2728
use crate::StringId;
2829

2930
/// Errors encountered during unification.

0 commit comments

Comments
 (0)