diff options
| author | Mattias EngdegÄrd | 2022-06-16 16:04:48 +0200 |
|---|---|---|
| committer | Mattias EngdegÄrd | 2022-06-16 16:04:48 +0200 |
| commit | a0f7d81a8dfefc20a283585dca3a37240a2b7a9a (patch) | |
| tree | ea80628d22b1ccbe77ee988596b8cdd3494094d5 /src | |
| parent | 946d70a8910a827d74a384ff6421b9e952e0df2e (diff) | |
| download | emacs-a0f7d81a8dfefc20a283585dca3a37240a2b7a9a.tar.gz emacs-a0f7d81a8dfefc20a283585dca3a37240a2b7a9a.zip | |
* src/fns.c (mapcar1): Test types in rough order of likelyhood.
Diffstat (limited to 'src')
| -rw-r--r-- | src/fns.c | 27 |
1 files changed, 15 insertions, 12 deletions
| @@ -2757,20 +2757,26 @@ usage: (nconc &rest LISTS) */) | |||
| 2757 | static EMACS_INT | 2757 | static EMACS_INT |
| 2758 | mapcar1 (EMACS_INT leni, Lisp_Object *vals, Lisp_Object fn, Lisp_Object seq) | 2758 | mapcar1 (EMACS_INT leni, Lisp_Object *vals, Lisp_Object fn, Lisp_Object seq) |
| 2759 | { | 2759 | { |
| 2760 | if (VECTORP (seq) || COMPILEDP (seq)) | 2760 | if (NILP (seq)) |
| 2761 | return 0; | ||
| 2762 | else if (CONSP (seq)) | ||
| 2761 | { | 2763 | { |
| 2764 | Lisp_Object tail = seq; | ||
| 2762 | for (ptrdiff_t i = 0; i < leni; i++) | 2765 | for (ptrdiff_t i = 0; i < leni; i++) |
| 2763 | { | 2766 | { |
| 2764 | Lisp_Object dummy = call1 (fn, AREF (seq, i)); | 2767 | if (! CONSP (tail)) |
| 2768 | return i; | ||
| 2769 | Lisp_Object dummy = call1 (fn, XCAR (tail)); | ||
| 2765 | if (vals) | 2770 | if (vals) |
| 2766 | vals[i] = dummy; | 2771 | vals[i] = dummy; |
| 2772 | tail = XCDR (tail); | ||
| 2767 | } | 2773 | } |
| 2768 | } | 2774 | } |
| 2769 | else if (BOOL_VECTOR_P (seq)) | 2775 | else if (VECTORP (seq) || COMPILEDP (seq)) |
| 2770 | { | 2776 | { |
| 2771 | for (EMACS_INT i = 0; i < leni; i++) | 2777 | for (ptrdiff_t i = 0; i < leni; i++) |
| 2772 | { | 2778 | { |
| 2773 | Lisp_Object dummy = call1 (fn, bool_vector_ref (seq, i)); | 2779 | Lisp_Object dummy = call1 (fn, AREF (seq, i)); |
| 2774 | if (vals) | 2780 | if (vals) |
| 2775 | vals[i] = dummy; | 2781 | vals[i] = dummy; |
| 2776 | } | 2782 | } |
| @@ -2788,17 +2794,14 @@ mapcar1 (EMACS_INT leni, Lisp_Object *vals, Lisp_Object fn, Lisp_Object seq) | |||
| 2788 | vals[i_before] = dummy; | 2794 | vals[i_before] = dummy; |
| 2789 | } | 2795 | } |
| 2790 | } | 2796 | } |
| 2791 | else /* Must be a list, since Flength did not get an error */ | 2797 | else |
| 2792 | { | 2798 | { |
| 2793 | Lisp_Object tail = seq; | 2799 | eassert (BOOL_VECTOR_P (seq)); |
| 2794 | for (ptrdiff_t i = 0; i < leni; i++) | 2800 | for (EMACS_INT i = 0; i < leni; i++) |
| 2795 | { | 2801 | { |
| 2796 | if (! CONSP (tail)) | 2802 | Lisp_Object dummy = call1 (fn, bool_vector_ref (seq, i)); |
| 2797 | return i; | ||
| 2798 | Lisp_Object dummy = call1 (fn, XCAR (tail)); | ||
| 2799 | if (vals) | 2803 | if (vals) |
| 2800 | vals[i] = dummy; | 2804 | vals[i] = dummy; |
| 2801 | tail = XCDR (tail); | ||
| 2802 | } | 2805 | } |
| 2803 | } | 2806 | } |
| 2804 | 2807 | ||