diff options
-rw-r--r-- | arith.c | 14 |
1 files changed, 8 insertions, 6 deletions
@@ -3867,21 +3867,20 @@ bad: val logtrunc(val a, val bits) { val self = logtrunc_s; - cnum an, bn; - val b; const cnum num_mask = (NUM_MAX << 1) | 1; if (!fixnump(bits)) goto bad2; - bn = c_n(bits); - - if (bn < 0) - return zero; switch (type(a)) { mp_err mpe; + cnum an, bn; + val b; case NUM: + bn = c_n(bits); + if (bn <= 0) + return zero; an = c_n(a); if (bn <= NUM_BIT) { cnum mask = num_mask >> (NUM_BIT - bn); @@ -3890,6 +3889,9 @@ val logtrunc(val a, val bits) a = bignum(an); /* fallthrough */ case BGNUM: + bn = c_n(bits); + if (bn <= 0) + return zero; b = make_ubignum(); if ((mpe = mp_trunc(mp(a), mp(b), bn)) != MP_OKAY) do_mp_error(self, mpe); |