update the parser with the number of lines already read by the underlying stream (#836)

This commit is contained in:
Mark Thom
2021-02-27 23:56:58 -07:00
parent 064d261357
commit 590a0b8077
3 changed files with 15 additions and 3 deletions

View File

@@ -965,6 +965,11 @@ impl<'a, R: Read> Parser<'a, R> {
self.lexer.eof()
}
#[inline]
pub fn add_lines_read(&mut self, lines_read: usize) {
self.lexer.line_num += lines_read;
}
#[inline]
pub fn num_lines_read(&self) -> usize {
self.lexer.line_num

View File

@@ -366,6 +366,11 @@ impl Stream {
ptr as *const u8
}
#[inline]
pub(crate) fn lines_read(&mut self) -> usize {
self.stream_inst.0.borrow_mut().lines_read
}
#[inline]
pub(crate) fn add_lines_read(&mut self, incr_num_lines_read: usize) {
self.stream_inst.0.borrow_mut().lines_read += incr_num_lines_read;

View File

@@ -185,7 +185,6 @@ impl MachineState {
let mut parser = Parser::new(&mut stream, atom_tbl, self.flags);
parser.devour_whitespace()?;
inner.add_lines_read(parser.num_lines_read());
let result = parser.eof();
let buf = stream.take_buf();
@@ -203,10 +202,13 @@ impl MachineState {
let mut stream = parsing_stream(inner.clone())?;
let (term, num_lines_read) = {
let prior_num_lines_read = inner.lines_read();
let mut parser = Parser::new(&mut stream, atom_tbl, self.flags);
let term = parser.read_term(&CompositeOpDir::new(op_dir, None))?;
(term, parser.num_lines_read())
parser.add_lines_read(prior_num_lines_read);
let term = parser.read_term(&CompositeOpDir::new(op_dir, None))?;
(term, parser.num_lines_read() - prior_num_lines_read)
};
inner.add_lines_read(num_lines_read);