From: Mark Thom Date: Sun, 17 May 2020 22:34:52 +0000 (-0600) Subject: fix atom_codes (#521) X-Git-Tag: v0.8.123~19 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=eecd809d9aaafb961747f6ee1aaabc9fe921c8ee;p=scryer-prolog.git fix atom_codes (#521) --- diff --git a/src/prolog/machine/system_calls.rs b/src/prolog/machine/system_calls.rs index 91e824a6..4061bdbc 100644 --- a/src/prolog/machine/system_calls.rs +++ b/src/prolog/machine/system_calls.rs @@ -503,7 +503,7 @@ impl MachineState { } } - fn int_to_char_code( + fn int_to_char( &self, n: &Integer, stub: &'static str, @@ -973,25 +973,17 @@ impl MachineState { match Number::try_from((addr, &self.heap)) { Ok(Number::Fixnum(n)) => { - match u32::try_from(n) { - Ok(c) => { - chars.push(std::char::from_u32(c).unwrap()); - } - _ => { - let c = self.int_to_char_code( - &Integer::from(n), - "atom_codes", - 2, - )?; - - chars.push(c); - } - } + let c = self.int_to_char( + &Integer::from(n), + "atom_codes", + 2, + )?; + chars.push(c); continue; } Ok(Number::Integer(n)) => { - let c = self.int_to_char_code(&n, "atom_codes", 2)?; + let c = self.int_to_char(&n, "atom_codes", 2)?; chars.push(c); continue; @@ -1012,6 +1004,12 @@ impl MachineState { } } } + + let string = self.heap.to_unifiable( + HeapCellValue::Atom(clause_name!(chars, indices.atom_tbl), None) + ); + + self.bind(addr.as_var().unwrap(), string); } } } @@ -1634,10 +1632,10 @@ impl MachineState { let c = match Number::try_from((a2, &self.heap)) { Ok(Number::Integer(n)) => { - self.int_to_char_code(&n, "char_code", 2)? + self.int_to_char(&n, "char_code", 2)? } Ok(Number::Fixnum(n)) => { - self.int_to_char_code(&Integer::from(n), "char_code", 2)? + self.int_to_char(&Integer::from(n), "char_code", 2)? } _ => { self.fail = true;