]> Repositorios git - scryer-prolog.git/commitdiff
Fixed some conversion issues
authornotoria <[email protected]>
Thu, 6 Aug 2020 09:39:55 +0000 (11:39 +0200)
committernotoria <[email protected]>
Thu, 6 Aug 2020 09:39:55 +0000 (11:39 +0200)
src/lib/builtins.pl
src/machine/system_calls.rs

index ebfebfffa801294a2de5648d8f26801342b5587b..df31270841e5549d832b9f5bac17fe10e4ae35dc 100644 (file)
@@ -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))
index c3488c2b14339929f4f01f6af597341d334b7f65..cfe45e808197d4574c9fcacc12f090ff9dbbb39d 100644 (file)
@@ -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!() }
                 };