aboutsummaryrefslogtreecommitdiff
path: root/compiler/src/span.rs
diff options
context:
space:
mode:
authorTolmachev Igor <me@igorek.dev>2026-05-07 17:46:44 +0300
committerTolmachev Igor <me@igorek.dev>2026-05-07 17:46:44 +0300
commit558c5dcaf7bcc32cfe5672c4113962e3bcd19188 (patch)
tree63c4af6a66e706b3f61cbd9cfcefd57d1e3ab3ce /compiler/src/span.rs
parent6b5bfd2d33d9aba94eed83ad8b119baa4732f5af (diff)
downloadcrisp-558c5dcaf7bcc32cfe5672c4113962e3bcd19188.tar.gz
crisp-558c5dcaf7bcc32cfe5672c4113962e3bcd19188.zip
Add lexer
Diffstat (limited to 'compiler/src/span.rs')
-rw-r--r--compiler/src/span.rs61
1 files changed, 61 insertions, 0 deletions
diff --git a/compiler/src/span.rs b/compiler/src/span.rs
new file mode 100644
index 0000000..0644c1c
--- /dev/null
+++ b/compiler/src/span.rs
@@ -0,0 +1,61 @@
1#[derive(Clone, Copy, Debug, PartialEq, Eq)]
2pub struct Pos {
3 line: usize,
4 column: usize,
5 cursor: usize,
6}
7
8impl Pos {
9 pub fn new(line: usize, column: usize, cursor: usize) -> Self {
10 Self {
11 line,
12 column,
13 cursor,
14 }
15 }
16
17 pub fn line(self) -> usize {
18 self.line
19 }
20
21 pub fn column(self) -> usize {
22 self.column
23 }
24
25 pub fn cursor(self) -> usize {
26 self.cursor
27 }
28}
29
30#[derive(Clone, Debug)]
31pub struct Span<T> {
32 inner: T,
33 start: Pos,
34 end: Pos,
35}
36
37impl<T> Span<T> {
38 pub fn new(inner: T, start: Pos, end: Pos) -> Self {
39 Self { inner, start, end }
40 }
41
42 pub fn inner(&self) -> &T {
43 &self.inner
44 }
45
46 pub fn inner_mut(&mut self) -> &mut T {
47 &mut self.inner
48 }
49
50 pub fn into_inner(self) -> T {
51 self.inner
52 }
53
54 pub fn start(&self) -> Pos {
55 self.start
56 }
57
58 pub fn end(&self) -> Pos {
59 self.end
60 }
61}