]> Repositorios git - scryer-prolog.git/commitdiff
update the parser with the number of lines already read by the underlying stream...
authorMark Thom <[email protected]>
Sun, 28 Feb 2021 06:56:58 +0000 (23:56 -0700)
committerMark Thom <[email protected]>
Sun, 28 Feb 2021 06:56:58 +0000 (23:56 -0700)
crates/prolog_parser/src/parser.rs
src/machine/streams.rs
src/read.rs

index 0fa142f68eea86ca13b5b2b5645c10ced9f83199..c72d64533e00789ca7445b4f94b63285320b6d9f 100644 (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
index c08a6ae515e651fdf7d7d6e44967313b5e5befcd..56bb38364b7999ef316536d4f87f89ae4eddd4bd 100644 (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;
index fa1584149b997e7d4e58b258654d298c28ea9be6..5d7d85c0e06ac42a102d703bd4a17001606c7579 100644 (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);