diff options
| author | Stefan Monnier | 2022-06-16 14:05:26 -0400 |
|---|---|---|
| committer | Stefan Monnier | 2022-06-16 16:30:44 -0400 |
| commit | e75ce9ca384d2f0c52c2a5b53eb9cbac9111956f (patch) | |
| tree | 23183dd3b2b5229b3a342f99aebf7b3e5a4f87d2 /src | |
| parent | cd9b920217e039e9999d9019c60cf7b0db6c2bca (diff) | |
| download | emacs-e75ce9ca384d2f0c52c2a5b53eb9cbac9111956f.tar.gz emacs-e75ce9ca384d2f0c52c2a5b53eb9cbac9111956f.zip | |
* src/fns.c (Fmapconcat): Optimize the case where separator==""
Diffstat (limited to 'src')
| -rw-r--r-- | src/fns.c | 14 |
1 files changed, 10 insertions, 4 deletions
| @@ -2834,12 +2834,18 @@ FUNCTION must be a function of one argument, and must return a value | |||
| 2834 | SAFE_ALLOCA_LISP (args, args_alloc); | 2834 | SAFE_ALLOCA_LISP (args, args_alloc); |
| 2835 | ptrdiff_t nmapped = mapcar1 (leni, args, function, sequence); | 2835 | ptrdiff_t nmapped = mapcar1 (leni, args, function, sequence); |
| 2836 | ptrdiff_t nargs = 2 * nmapped - 1; | 2836 | ptrdiff_t nargs = 2 * nmapped - 1; |
| 2837 | eassert (nmapped == leni); | ||
| 2837 | 2838 | ||
| 2838 | for (ptrdiff_t i = nmapped - 1; i > 0; i--) | 2839 | if (!NILP (Fequal (separator, empty_multibyte_string))) |
| 2839 | args[i + i] = args[i]; | 2840 | nargs = nmapped; |
| 2841 | else | ||
| 2842 | { | ||
| 2843 | for (ptrdiff_t i = nmapped - 1; i > 0; i--) | ||
| 2844 | args[i + i] = args[i]; | ||
| 2840 | 2845 | ||
| 2841 | for (ptrdiff_t i = 1; i < nargs; i += 2) | 2846 | for (ptrdiff_t i = 1; i < nargs; i += 2) |
| 2842 | args[i] = separator; | 2847 | args[i] = separator; |
| 2848 | } | ||
| 2843 | 2849 | ||
| 2844 | Lisp_Object ret = Fconcat (nargs, args); | 2850 | Lisp_Object ret = Fconcat (nargs, args); |
| 2845 | SAFE_FREE (); | 2851 | SAFE_FREE (); |