detect end_of_file before end_of_stream in get_char (#2990)

This commit is contained in:
Mark Thom
2025-07-22 20:16:24 -07:00
parent 65dda019a2
commit 9b293cf1b6

View File

@@ -3545,24 +3545,22 @@ impl Machine {
self.machine_st.unify_atom(end_of_file, addr); 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(()); return Ok(());
} }
let stub_gen = || functor_stub(atom!("get_char"), 2); let stub_gen = || functor_stub(atom!("get_char"), 2);
let result = self.machine_st.open_parsing_stream(stream);
let addr = if addr.is_var() { let addr = if addr.is_var() {
addr addr
} else { } else {
read_heap_cell!(addr, read_heap_cell!(addr,
(HeapCellValueTag::Atom, (atom, _arity)) => { (HeapCellValueTag::Atom, (atom, _arity)) => {
char_as_cell!(atom.as_char().unwrap()) debug_assert!(atom.as_char().is_some());
}
/*
(HeapCellValueTag::Char) => {
addr addr
} }
*/
_ => { _ => {
let err = self.machine_st.type_error(ValidType::InCharacter, addr); let err = self.machine_st.type_error(ValidType::InCharacter, addr);
return Err(self.machine_st.error_form(err, stub_gen())); 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, Ok(iter) => iter,
Err(e) => { Err(e) => {
if e.is_unexpected_eof() { if e.is_unexpected_eof() {