Yield source positions from lexer that have file-relative offsets
They were previously all source texts concatenated-relative offsets, which would cause `miette` to error out when trying to find the line/col when displaying errors. Not good to have errors when displaying errors! Gets very confusing when trying to track down ISLE type errors and things.
This commit is contained in:
committed by
Chris Fallin
parent
7f8cb75e54
commit
fe836a2302
@@ -135,14 +135,14 @@ impl<'a> Lexer<'a> {
|
|||||||
Ok(l)
|
Ok(l)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the lexer's current file offset.
|
|
||||||
pub fn offset(&self) -> usize {
|
|
||||||
self.pos.offset
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Get the lexer's current source position.
|
/// Get the lexer's current source position.
|
||||||
pub fn pos(&self) -> Pos {
|
pub fn pos(&self) -> Pos {
|
||||||
self.pos
|
Pos {
|
||||||
|
file: self.pos.file,
|
||||||
|
offset: self.pos.offset - self.file_starts[self.pos.file],
|
||||||
|
line: self.pos.line,
|
||||||
|
col: self.pos.file,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn advance_pos(&mut self) {
|
fn advance_pos(&mut self) {
|
||||||
@@ -169,7 +169,7 @@ impl<'a> Lexer<'a> {
|
|||||||
self.filenames[pos.file].clone(),
|
self.filenames[pos.file].clone(),
|
||||||
self.file_texts[pos.file].clone(),
|
self.file_texts[pos.file].clone(),
|
||||||
),
|
),
|
||||||
span: miette::SourceSpan::from((pos.offset, 1)),
|
span: miette::SourceSpan::from((self.pos().offset, 1)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -208,7 +208,7 @@ impl<'a> Lexer<'a> {
|
|||||||
return Ok(None);
|
return Ok(None);
|
||||||
}
|
}
|
||||||
|
|
||||||
let char_pos = self.pos;
|
let char_pos = self.pos();
|
||||||
match self.buf[self.pos.offset] {
|
match self.buf[self.pos.offset] {
|
||||||
b'(' => {
|
b'(' => {
|
||||||
self.advance_pos();
|
self.advance_pos();
|
||||||
@@ -228,7 +228,7 @@ impl<'a> Lexer<'a> {
|
|||||||
}
|
}
|
||||||
c if is_sym_first_char(c) => {
|
c if is_sym_first_char(c) => {
|
||||||
let start = self.pos.offset;
|
let start = self.pos.offset;
|
||||||
let start_pos = self.pos;
|
let start_pos = self.pos();
|
||||||
while self.pos.offset < self.buf.len()
|
while self.pos.offset < self.buf.len()
|
||||||
&& is_sym_other_char(self.buf[self.pos.offset])
|
&& is_sym_other_char(self.buf[self.pos.offset])
|
||||||
{
|
{
|
||||||
@@ -241,7 +241,7 @@ impl<'a> Lexer<'a> {
|
|||||||
Ok(Some((start_pos, Token::Symbol(s.to_string()))))
|
Ok(Some((start_pos, Token::Symbol(s.to_string()))))
|
||||||
}
|
}
|
||||||
c if (c >= b'0' && c <= b'9') || c == b'-' => {
|
c if (c >= b'0' && c <= b'9') || c == b'-' => {
|
||||||
let start_pos = self.pos;
|
let start_pos = self.pos();
|
||||||
let neg = if c == b'-' {
|
let neg = if c == b'-' {
|
||||||
self.advance_pos();
|
self.advance_pos();
|
||||||
true
|
true
|
||||||
|
|||||||
Reference in New Issue
Block a user