refine EOF handling
This commit is contained in:
@@ -7469,17 +7469,21 @@ impl Machine {
|
||||
|
||||
#[inline(always)]
|
||||
pub(crate) fn devour_whitespace(&mut self) -> CallResult {
|
||||
let stream = self.machine_st.get_stream_or_alias(
|
||||
let mut stream = self.machine_st.get_stream_or_alias(
|
||||
self.machine_st.registers[1],
|
||||
&self.indices.stream_aliases,
|
||||
atom!("$devour_whitespace"),
|
||||
1,
|
||||
)?;
|
||||
|
||||
match self.machine_st.devour_whitespace(stream) {
|
||||
let mut parser = Parser::new(stream, &mut self.machine_st);
|
||||
|
||||
match devour_whitespace(&mut parser) {
|
||||
Ok(false) => { // not at EOF.
|
||||
stream.add_lines_read(parser.lines_read());
|
||||
}
|
||||
Ok(true) => {
|
||||
stream.add_lines_read(parser.lines_read());
|
||||
self.machine_st.fail = true;
|
||||
}
|
||||
Err(err) => {
|
||||
|
||||
@@ -5,6 +5,7 @@ use crate::machine::loader::*;
|
||||
use crate::machine::machine_errors::*;
|
||||
use crate::parser::ast::*;
|
||||
use crate::parser::parser::*;
|
||||
use crate::read::devour_whitespace;
|
||||
|
||||
use crate::predicate_queue;
|
||||
|
||||
@@ -58,8 +59,8 @@ impl<'a> TermStream for BootstrappingTermStream<'a> {
|
||||
|
||||
#[inline]
|
||||
fn eof(&mut self) -> Result<bool, CompilationError> {
|
||||
self.parser.devour_whitespace()?; // eliminate dangling comments before checking for EOF.
|
||||
Ok(self.parser.eof()?)
|
||||
devour_whitespace(&mut self.parser) // eliminate dangling comments before checking for EOF.
|
||||
.map_err(CompilationError::from)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
@@ -111,7 +112,7 @@ impl TermStream for LiveTermStream {
|
||||
|
||||
#[inline]
|
||||
fn eof(&mut self) -> Result<bool, CompilationError> {
|
||||
return Ok(self.term_queue.is_empty());
|
||||
Ok(self.term_queue.is_empty())
|
||||
}
|
||||
|
||||
#[inline]
|
||||
|
||||
Reference in New Issue
Block a user