aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorStefan Monnier2022-06-16 14:05:26 -0400
committerStefan Monnier2022-06-16 16:30:44 -0400
commite75ce9ca384d2f0c52c2a5b53eb9cbac9111956f (patch)
tree23183dd3b2b5229b3a342f99aebf7b3e5a4f87d2 /src
parentcd9b920217e039e9999d9019c60cf7b0db6c2bca (diff)
downloademacs-e75ce9ca384d2f0c52c2a5b53eb9cbac9111956f.tar.gz
emacs-e75ce9ca384d2f0c52c2a5b53eb9cbac9111956f.zip
* src/fns.c (Fmapconcat): Optimize the case where separator==""
Diffstat (limited to 'src')
-rw-r--r--src/fns.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/fns.c b/src/fns.c
index 4df944507c7..a6ceac29355 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -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 ();