From: Mark Thom Date: Wed, 23 Jul 2025 03:16:24 +0000 (-0700) Subject: detect end_of_file before end_of_stream in get_char (#2990) X-Git-Tag: v0.10.0~35^2~2 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=9b293cf1b601ca1fd2a00e8645cc89a795c34b0c;p=scryer-prolog.git detect end_of_file before end_of_stream in get_char (#2990) --- diff --git a/src/machine/system_calls.rs b/src/machine/system_calls.rs index d301a85a..6c861ae6 100644 --- a/src/machine/system_calls.rs +++ b/src/machine/system_calls.rs @@ -3545,24 +3545,22 @@ impl Machine { self.machine_st.unify_atom(end_of_file, addr); + return Ok(()); + } else if addr == atom_as_cell!(atom!("end_of_file")) { + self.machine_st.fail = true; return Ok(()); } let stub_gen = || functor_stub(atom!("get_char"), 2); - let result = self.machine_st.open_parsing_stream(stream); let addr = if addr.is_var() { addr } else { read_heap_cell!(addr, (HeapCellValueTag::Atom, (atom, _arity)) => { - char_as_cell!(atom.as_char().unwrap()) - } - /* - (HeapCellValueTag::Char) => { + debug_assert!(atom.as_char().is_some()); addr } - */ _ => { let err = self.machine_st.type_error(ValidType::InCharacter, addr); return Err(self.machine_st.error_form(err, stub_gen())); @@ -3570,7 +3568,7 @@ impl Machine { ) }; - let mut iter = match result { + let mut iter = match self.machine_st.open_parsing_stream(stream) { Ok(iter) => iter, Err(e) => { if e.is_unexpected_eof() {