From: Mark Date: Fri, 7 Jul 2023 16:38:05 +0000 (-0600) Subject: add stream alias processing to atom_chars/2, atom_codes/2 X-Git-Tag: v0.9.2~82 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=811ff652097849bbb05e0e6f51c186d65cd2e236;p=scryer-prolog.git add stream alias processing to atom_chars/2, atom_codes/2 --- diff --git a/src/machine/system_calls.rs b/src/machine/system_calls.rs index b05dd102..f74ad4a8 100644 --- a/src/machine/system_calls.rs +++ b/src/machine/system_calls.rs @@ -2181,6 +2181,17 @@ impl Machine { self.machine_st.fail = true; } + (HeapCellValueTag::Cons, ptr) => { + match_untyped_arena_ptr!(ptr, + (ArenaHeaderTag::Stream, stream) => { + let alias = stream.options().get_alias().unwrap(); + self.machine_st.unify_complete_string(alias, a2); + } + _ => { + unreachable!(); + } + ); + } _ => { unreachable!(); } @@ -2240,6 +2251,22 @@ impl Machine { } } } + (HeapCellValueTag::Cons, ptr) => { + match_untyped_arena_ptr!(ptr, + (ArenaHeaderTag::Stream, stream) => { + let alias = stream.options().get_alias().unwrap(); + + let iter = alias.chars() + .map(|c| fixnum_as_cell!(Fixnum::build_with(c as i64))); + + let h = iter_to_heap_list(&mut self.machine_st.heap, iter); + unify!(self.machine_st, heap_loc_as_cell!(h), self.machine_st.registers[2]); + } + _ => { + unreachable!(); + } + ); + } _ => { unreachable!(); }