From: notoria Date: Thu, 6 Aug 2020 09:39:55 +0000 (+0200) Subject: Fixed some conversion issues X-Git-Tag: v0.9.0~174^2~15^2^2 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=3143468751effdc06dd0f578235dc8a322737832;p=scryer-prolog.git Fixed some conversion issues --- diff --git a/src/lib/builtins.pl b/src/lib/builtins.pl index ebfebfff..df312708 100644 --- a/src/lib/builtins.pl +++ b/src/lib/builtins.pl @@ -918,6 +918,7 @@ op(Priority, OpSpec, Op) :- halt :- halt(0). halt(N) :- + must_be_number(N, halt/1), ( -2^31 =< N, N =< 2^31 - 1 -> '$halt'(N) ; throw(error(domain_error(exit_code, N), halt/1)) diff --git a/src/machine/system_calls.rs b/src/machine/system_calls.rs index c3488c2b..cfe45e80 100644 --- a/src/machine/system_calls.rs +++ b/src/machine/system_calls.rs @@ -1706,6 +1706,12 @@ impl MachineState { Ok(Number::Integer(n)) => { n.to_string() } + Ok(Number::Rational(r)) => { + // n has already been confirmed as an integer, and + // internally, Rational is assumed reduced, so its + // denominator must be 1. + r.numer().to_string() + } _ => { unreachable!() } @@ -3766,6 +3772,12 @@ impl MachineState { let code = match Number::try_from((code, &self.heap)) { Ok(Number::Fixnum(n)) => n as i32, Ok(Number::Integer(n)) => n.to_i32().unwrap(), + Ok(Number::Rational(r)) => { + // n has already been confirmed as an integer, and + // internally, Rational is assumed reduced, so its + // denominator must be 1. + r.numer().to_i32().unwrap() + } _ => { unreachable!() } };