From 590a0b807787a4561966e70a1b9cdffdbc8bf80c Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Sat, 27 Feb 2021 23:56:58 -0700 Subject: [PATCH] update the parser with the number of lines already read by the underlying stream (#836) --- crates/prolog_parser/src/parser.rs | 5 +++++ src/machine/streams.rs | 5 +++++ src/read.rs | 8 +++++--- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/crates/prolog_parser/src/parser.rs b/crates/prolog_parser/src/parser.rs index 0fa142f6..c72d6453 100644 --- a/crates/prolog_parser/src/parser.rs +++ b/crates/prolog_parser/src/parser.rs @@ -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 diff --git a/src/machine/streams.rs b/src/machine/streams.rs index c08a6ae5..56bb3836 100644 --- a/src/machine/streams.rs +++ b/src/machine/streams.rs @@ -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; diff --git a/src/read.rs b/src/read.rs index fa158414..5d7d85c0 100644 --- a/src/read.rs +++ b/src/read.rs @@ -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); -- 2.54.0