\ bignum-gcd { bignum bignum } { bignum } define-primitive \ bignum-gcd make-foldable
\ bignum-shift { bignum fixnum } { bignum } define-primitive \ bignum-shift make-foldable
\ bignum/i { bignum bignum } { bignum } define-primitive \ bignum/i make-foldable
-\ bignum/mod { bignum bignum } { bignum bignum } define-primitive \ bignum/mod make-foldable
+\ bignum/mod { bignum bignum } { bignum integer } define-primitive \ bignum/mod make-foldable
\ bignum< { bignum bignum } { object } define-primitive \ bignum< make-foldable
\ bignum<= { bignum bignum } { object } define-primitive \ bignum<= make-foldable
\ bignum= { bignum bignum } { object } define-primitive \ bignum= make-foldable
namespace factor {
cell bignum_maybe_to_fixnum(bignum* bn) {
+ if (BIGNUM_ZERO_P(bn))
+ return tag_fixnum(0);
fixnum len = BIGNUM_LENGTH(bn);
bignum_digit_type *digits = BIGNUM_START_PTR(bn);
if (len == 1 && digits[0] >= fixnum_min && digits[0] <= fixnum_max) {
bignum* q, *r;
bignum_divide(x, y, &q, &r);
*s1 = tag<bignum>(q);
- *s0 = tag<bignum>(r);
+ *s0 = bignum_maybe_to_fixnum(r);
}
void factor_vm::primitive_bignum_mod() {