Skip to content

Commit 2f4e851

Browse files
committed
py/mpz: Force rhs of mpz_shl_inpl/mpz_shr_inpl to be unsigned.
Python semantics are that rhs of shift must be non-negative, so there's no need to handle negative values in the underlying mpz implementation.
1 parent 4c02e54 commit 2f4e851

2 files changed

Lines changed: 4 additions & 8 deletions

File tree

py/mpz.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -992,11 +992,9 @@ void mpz_not_inpl(mpz_t *dest, const mpz_t *z) {
992992
/* computes dest = lhs << rhs
993993
can have dest, lhs the same
994994
*/
995-
void mpz_shl_inpl(mpz_t *dest, const mpz_t *lhs, mp_int_t rhs) {
995+
void mpz_shl_inpl(mpz_t *dest, const mpz_t *lhs, mp_uint_t rhs) {
996996
if (lhs->len == 0 || rhs == 0) {
997997
mpz_set(dest, lhs);
998-
} else if (rhs < 0) {
999-
mpz_shr_inpl(dest, lhs, -rhs);
1000998
} else {
1001999
mpz_need_dig(dest, lhs->len + (rhs + DIG_SIZE - 1) / DIG_SIZE);
10021000
dest->len = mpn_shl(dest->dig, lhs->dig, lhs->len, rhs);
@@ -1007,11 +1005,9 @@ void mpz_shl_inpl(mpz_t *dest, const mpz_t *lhs, mp_int_t rhs) {
10071005
/* computes dest = lhs >> rhs
10081006
can have dest, lhs the same
10091007
*/
1010-
void mpz_shr_inpl(mpz_t *dest, const mpz_t *lhs, mp_int_t rhs) {
1008+
void mpz_shr_inpl(mpz_t *dest, const mpz_t *lhs, mp_uint_t rhs) {
10111009
if (lhs->len == 0 || rhs == 0) {
10121010
mpz_set(dest, lhs);
1013-
} else if (rhs < 0) {
1014-
mpz_shl_inpl(dest, lhs, -rhs);
10151011
} else {
10161012
mpz_need_dig(dest, lhs->len);
10171013
dest->len = mpn_shr(dest->dig, lhs->dig, lhs->len, rhs);

py/mpz.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ int mpz_cmp(const mpz_t *lhs, const mpz_t *rhs);
112112
void mpz_abs_inpl(mpz_t *dest, const mpz_t *z);
113113
void mpz_neg_inpl(mpz_t *dest, const mpz_t *z);
114114
void mpz_not_inpl(mpz_t *dest, const mpz_t *z);
115-
void mpz_shl_inpl(mpz_t *dest, const mpz_t *lhs, mp_int_t rhs);
116-
void mpz_shr_inpl(mpz_t *dest, const mpz_t *lhs, mp_int_t rhs);
115+
void mpz_shl_inpl(mpz_t *dest, const mpz_t *lhs, mp_uint_t rhs);
116+
void mpz_shr_inpl(mpz_t *dest, const mpz_t *lhs, mp_uint_t rhs);
117117
void mpz_add_inpl(mpz_t *dest, const mpz_t *lhs, const mpz_t *rhs);
118118
void mpz_sub_inpl(mpz_t *dest, const mpz_t *lhs, const mpz_t *rhs);
119119
void mpz_mul_inpl(mpz_t *dest, const mpz_t *lhs, const mpz_t *rhs);

0 commit comments

Comments
 (0)