fix atom_codes (#521)

This commit is contained in:
Mark Thom
2020-05-17 16:34:52 -06:00
parent 240d3cb8f1
commit eecd809d9a

View File

@@ -503,7 +503,7 @@ impl MachineState {
} }
} }
fn int_to_char_code( fn int_to_char(
&self, &self,
n: &Integer, n: &Integer,
stub: &'static str, stub: &'static str,
@@ -973,25 +973,17 @@ impl MachineState {
match Number::try_from((addr, &self.heap)) { match Number::try_from((addr, &self.heap)) {
Ok(Number::Fixnum(n)) => { Ok(Number::Fixnum(n)) => {
match u32::try_from(n) { let c = self.int_to_char(
Ok(c) => {
chars.push(std::char::from_u32(c).unwrap());
}
_ => {
let c = self.int_to_char_code(
&Integer::from(n), &Integer::from(n),
"atom_codes", "atom_codes",
2, 2,
)?; )?;
chars.push(c); chars.push(c);
}
}
continue; continue;
} }
Ok(Number::Integer(n)) => { 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); chars.push(c);
continue; 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)) { let c = match Number::try_from((a2, &self.heap)) {
Ok(Number::Integer(n)) => { 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)) => { 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; self.fail = true;