diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2019-08-18 12:11:06 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2019-08-18 12:12:45 -0700 |
commit | 780509f29f0aa006a578744f7e871eb6d5ce5931 (patch) | |
tree | f8b9af7529ea7d617038eebf12b62299a19750d9 /src/data.c | |
parent | f92d61c06c82d515ee83e340b8af4b1489778404 (diff) | |
download | emacs-780509f29f0aa006a578744f7e871eb6d5ce5931.tar.gz |
Improve bignum_integer static checking
* src/bignum.h (bignum_integer): Now returns pointer-to-const,
to catch trivial mistakes where the caller might try to modify
a Lisp bignum. Lisp bignums are supposed to be immutable.
All callers changed.
Diffstat (limited to 'src/data.c')
-rw-r--r-- | src/data.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/data.c b/src/data.c index 6db8ea144dd..cf9f8e56133 100644 --- a/src/data.c +++ b/src/data.c @@ -2871,7 +2871,7 @@ static Lisp_Object bignum_arith_driver (enum arithop code, ptrdiff_t nargs, Lisp_Object *args, ptrdiff_t argnum, intmax_t iaccum, Lisp_Object val) { - mpz_t *accum; + mpz_t const *accum; if (argnum == 0) { accum = bignum_integer (&mpz[0], val); @@ -2882,7 +2882,7 @@ bignum_arith_driver (enum arithop code, ptrdiff_t nargs, Lisp_Object *args, while (true) { - mpz_t *next = bignum_integer (&mpz[1], val); + mpz_t const *next = bignum_integer (&mpz[1], val); switch (code) { @@ -3099,7 +3099,7 @@ integer_mod (Lisp_Object x, Lisp_Object y) } else { - mpz_t *ym = bignum_integer (&mpz[1], y); + mpz_t const *ym = bignum_integer (&mpz[1], y); bool neg_y = mpz_sgn (*ym) < 0; mpz_mod (mpz[0], *bignum_integer (&mpz[0], x), *ym); @@ -3269,7 +3269,7 @@ In this case, the sign bit is duplicated. */) } } - mpz_t *zval = bignum_integer (&mpz[0], value); + mpz_t const *zval = bignum_integer (&mpz[0], value); if (XFIXNUM (count) < 0) { if (TYPE_MAXIMUM (mp_bitcnt_t) < - XFIXNUM (count)) |