From c8b90592897b7576b1947dcacdb5b1ef4fe354ce Mon Sep 17 00:00:00 2001 From: Mark Date: Sun, 9 Jul 2023 01:53:40 -0600 Subject: [PATCH] refine EOF handling more (#1873) --- src/parser/lexer.rs | 35 ++++++++++++++++++++++------------- src/parser/parser.rs | 24 ------------------------ src/read.rs | 4 ++-- src/toplevel.pl | 1 + 4 files changed, 25 insertions(+), 39 deletions(-) diff --git a/src/parser/lexer.rs b/src/parser/lexer.rs index 1eacc80b..664af935 100644 --- a/src/parser/lexer.rs +++ b/src/parser/lexer.rs @@ -24,9 +24,9 @@ macro_rules! consume_chars_with { } #[derive(Debug, Default)] -pub struct LayoutInfo { - pub inserted: bool, - pub more: bool, +struct LayoutInfo { + inserted: bool, + more: bool, } #[derive(Debug, PartialEq)] @@ -909,7 +909,7 @@ impl<'a, R: CharRead> Lexer<'a, R> { } } - pub fn consume_layout( + fn consume_layout( &mut self, c: Option, layout_info: &mut LayoutInfo, @@ -938,19 +938,28 @@ impl<'a, R: CharRead> Lexer<'a, R> { Ok(()) } - fn scan_for_layout(&mut self) -> Result { - let mut layout_info = LayoutInfo { inserted: false, more: true }; + pub fn scan_for_layout(&mut self) -> Result { + match self.lookahead_char() { + Err(e) => { + Err(e) + } + Ok(c) => { + let mut layout_info = LayoutInfo { inserted: false, more: true }; + let mut cr = Some(c); - loop { - let cr = self.lookahead_char(); - self.consume_layout(cr.ok(), &mut layout_info)?; + loop { + self.consume_layout(cr, &mut layout_info)?; - if !layout_info.more { - break; + if !layout_info.more { + break; + } + + cr = self.lookahead_char().ok(); + } + + Ok(layout_info.inserted) } } - - Ok(layout_info.inserted) } pub fn next_token(&mut self) -> Result { diff --git a/src/parser/parser.rs b/src/parser/parser.rs index 41cc108c..a952f73f 100644 --- a/src/parser/parser.rs +++ b/src/parser/parser.rs @@ -620,30 +620,6 @@ impl<'a, R: CharRead> Parser<'a, R> { false } - pub fn devour_whitespace(&mut self) -> Result<(), ParserError> { - match self.lexer.lookahead_char() { - Err(e) => { // if e.is_unexpected_eof() => { - return Err(e); - } - Ok(c) => { - let mut layout_info = LayoutInfo { inserted: false, more: true }; - let mut cr = Some(c); - - loop { - self.lexer.consume_layout(cr, &mut layout_info)?; - - if !layout_info.more { - break; - } - - cr = self.lexer.lookahead_char().ok(); - } - } - } - - Ok(()) - } - pub fn reset(&mut self) { self.stack.clear() } diff --git a/src/read.rs b/src/read.rs index 6094b38e..9a191dad 100644 --- a/src/read.rs +++ b/src/read.rs @@ -25,12 +25,12 @@ use std::io::{Cursor, Error, ErrorKind, Read}; type SubtermDeque = VecDeque<(usize, usize)>; pub(crate) fn devour_whitespace<'a, R: CharRead>(parser: &mut Parser<'a, R>) -> Result { - match parser.devour_whitespace() { + match parser.lexer.scan_for_layout() { Err(e) if e.is_unexpected_eof() => { Ok(true) } Err(e) => Err(e), - Ok(()) => { + Ok(_) => { Ok(false) } } diff --git a/src/toplevel.pl b/src/toplevel.pl index 6a87df3c..989e083a 100644 --- a/src/toplevel.pl +++ b/src/toplevel.pl @@ -152,6 +152,7 @@ expand_op_list([Op | OtherOps], Pred, Spec, [(:- op(Pred, Spec, Op)) | OtherResu read_and_match :- + '$debug_hook', '$read_query_term'(_, Term, _, _, VarList), instruction_match(Term, VarList). -- 2.54.0