aboutsummaryrefslogtreecommitdiffstats
path: root/src/data.c
diff options
context:
space:
mode:
authorPaul Eggert2019-08-18 12:11:06 -0700
committerPaul Eggert2019-08-18 12:12:45 -0700
commit780509f29f0aa006a578744f7e871eb6d5ce5931 (patch)
treef8b9af7529ea7d617038eebf12b62299a19750d9 /src/data.c
parentf92d61c06c82d515ee83e340b8af4b1489778404 (diff)
downloademacs-780509f29f0aa006a578744f7e871eb6d5ce5931.tar.gz
emacs-780509f29f0aa006a578744f7e871eb6d5ce5931.zip
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.c8
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
2871bignum_arith_driver (enum arithop code, ptrdiff_t nargs, Lisp_Object *args, 2871bignum_arith_driver (enum arithop code, ptrdiff_t nargs, Lisp_Object *args,
2872 ptrdiff_t argnum, intmax_t iaccum, Lisp_Object val) 2872 ptrdiff_t argnum, intmax_t iaccum, Lisp_Object val)
2873{ 2873{
2874 mpz_t *accum; 2874 mpz_t const *accum;
2875 if (argnum == 0) 2875 if (argnum == 0)
2876 { 2876 {
2877 accum = bignum_integer (&mpz[0], val); 2877 accum = bignum_integer (&mpz[0], val);
@@ -2882,7 +2882,7 @@ bignum_arith_driver (enum arithop code, ptrdiff_t nargs, Lisp_Object *args,
2882 2882
2883 while (true) 2883 while (true)
2884 { 2884 {
2885 mpz_t *next = bignum_integer (&mpz[1], val); 2885 mpz_t const *next = bignum_integer (&mpz[1], val);
2886 2886
2887 switch (code) 2887 switch (code)
2888 { 2888 {
@@ -3099,7 +3099,7 @@ integer_mod (Lisp_Object x, Lisp_Object y)
3099 } 3099 }
3100 else 3100 else
3101 { 3101 {
3102 mpz_t *ym = bignum_integer (&mpz[1], y); 3102 mpz_t const *ym = bignum_integer (&mpz[1], y);
3103 bool neg_y = mpz_sgn (*ym) < 0; 3103 bool neg_y = mpz_sgn (*ym) < 0;
3104 mpz_mod (mpz[0], *bignum_integer (&mpz[0], x), *ym); 3104 mpz_mod (mpz[0], *bignum_integer (&mpz[0], x), *ym);
3105 3105
@@ -3269,7 +3269,7 @@ In this case, the sign bit is duplicated. */)
3269 } 3269 }
3270 } 3270 }
3271 3271
3272 mpz_t *zval = bignum_integer (&mpz[0], value); 3272 mpz_t const *zval = bignum_integer (&mpz[0], value);
3273 if (XFIXNUM (count) < 0) 3273 if (XFIXNUM (count) < 0)
3274 { 3274 {
3275 if (TYPE_MAXIMUM (mp_bitcnt_t) < - XFIXNUM (count)) 3275 if (TYPE_MAXIMUM (mp_bitcnt_t) < - XFIXNUM (count))