aboutsummaryrefslogtreecommitdiffstats
path: root/src/fns.c
diff options
context:
space:
mode:
authorPaul Eggert2020-04-17 14:09:01 -0700
committerPaul Eggert2020-04-17 14:11:30 -0700
commit2cb7e8669c3cdd0f7f0687e01810a3160d6b5c5b (patch)
tree21fd3ca5914224a2478d7c528e68d0ca64ceddc1 /src/fns.c
parentfadfde5fdf2fd8fc3b3b4ba430a954a89d0cd1fe (diff)
downloademacs-2cb7e8669c3cdd0f7f0687e01810a3160d6b5c5b.tar.gz
emacs-2cb7e8669c3cdd0f7f0687e01810a3160d6b5c5b.zip
Port recent character.h changes to --with-wide-int
* src/fns.c (mapcar1): * src/keymap.c (Fkey_description): * src/syntax.c (scan_lists): Prefer ptrdiff_t to EMACS_INT where either will do; this fixes newly-introduced type errors on --with-wide-int platforms where ptrdiff_t is narrower than EMACS_INT. * src/keymap.c (Fkey_description): Rework for clarity; remove goto. * src/syntax.c (scan_words, Fforward_comment, scan_lists)): Fix unlikely integer overflow problems that can occur on --with-wide-int platforms, and that were caught by the recent character.h changes.
Diffstat (limited to 'src/fns.c')
-rw-r--r--src/fns.c24
1 files changed, 10 insertions, 14 deletions
diff --git a/src/fns.c b/src/fns.c
index cefdf389a54..ec0004d2528 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -2600,49 +2600,45 @@ usage: (nconc &rest LISTS) */)
2600static EMACS_INT 2600static EMACS_INT
2601mapcar1 (EMACS_INT leni, Lisp_Object *vals, Lisp_Object fn, Lisp_Object seq) 2601mapcar1 (EMACS_INT leni, Lisp_Object *vals, Lisp_Object fn, Lisp_Object seq)
2602{ 2602{
2603 Lisp_Object tail, dummy;
2604 EMACS_INT i;
2605
2606 if (VECTORP (seq) || COMPILEDP (seq)) 2603 if (VECTORP (seq) || COMPILEDP (seq))
2607 { 2604 {
2608 for (i = 0; i < leni; i++) 2605 for (ptrdiff_t i = 0; i < leni; i++)
2609 { 2606 {
2610 dummy = call1 (fn, AREF (seq, i)); 2607 Lisp_Object dummy = call1 (fn, AREF (seq, i));
2611 if (vals) 2608 if (vals)
2612 vals[i] = dummy; 2609 vals[i] = dummy;
2613 } 2610 }
2614 } 2611 }
2615 else if (BOOL_VECTOR_P (seq)) 2612 else if (BOOL_VECTOR_P (seq))
2616 { 2613 {
2617 for (i = 0; i < leni; i++) 2614 for (EMACS_INT i = 0; i < leni; i++)
2618 { 2615 {
2619 dummy = call1 (fn, bool_vector_ref (seq, i)); 2616 Lisp_Object dummy = call1 (fn, bool_vector_ref (seq, i));
2620 if (vals) 2617 if (vals)
2621 vals[i] = dummy; 2618 vals[i] = dummy;
2622 } 2619 }
2623 } 2620 }
2624 else if (STRINGP (seq)) 2621 else if (STRINGP (seq))
2625 { 2622 {
2626 ptrdiff_t i_byte; 2623 ptrdiff_t i_byte = 0;
2627 2624
2628 for (i = 0, i_byte = 0; i < leni;) 2625 for (ptrdiff_t i = 0; i < leni;)
2629 { 2626 {
2630 ptrdiff_t i_before = i; 2627 ptrdiff_t i_before = i;
2631 int c = fetch_string_char_advance (seq, &i, &i_byte); 2628 int c = fetch_string_char_advance (seq, &i, &i_byte);
2632 XSETFASTINT (dummy, c); 2629 Lisp_Object dummy = call1 (fn, make_fixnum (c));
2633 dummy = call1 (fn, dummy);
2634 if (vals) 2630 if (vals)
2635 vals[i_before] = dummy; 2631 vals[i_before] = dummy;
2636 } 2632 }
2637 } 2633 }
2638 else /* Must be a list, since Flength did not get an error */ 2634 else /* Must be a list, since Flength did not get an error */
2639 { 2635 {
2640 tail = seq; 2636 Lisp_Object tail = seq;
2641 for (i = 0; i < leni; i++) 2637 for (ptrdiff_t i = 0; i < leni; i++)
2642 { 2638 {
2643 if (! CONSP (tail)) 2639 if (! CONSP (tail))
2644 return i; 2640 return i;
2645 dummy = call1 (fn, XCAR (tail)); 2641 Lisp_Object dummy = call1 (fn, XCAR (tail));
2646 if (vals) 2642 if (vals)
2647 vals[i] = dummy; 2643 vals[i] = dummy;
2648 tail = XCDR (tail); 2644 tail = XCDR (tail);