update the parser with the number of lines already read by the underlying stream (#836)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user