]> git.eshelyaron.com Git - emacs.git/commitdiff
* src/fns.c (Fmapconcat): Optimize the case where separator==""
authorStefan Monnier <monnier@iro.umontreal.ca>
Thu, 16 Jun 2022 18:05:26 +0000 (14:05 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Thu, 16 Jun 2022 20:30:44 +0000 (16:30 -0400)
src/fns.c

index 4df944507c79c15c6fccd2ad8b3465e7a17db3be..a6ceac293550b8cbe7b7e87a59804cfa9b99897f 100644 (file)
--- 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
   SAFE_ALLOCA_LISP (args, args_alloc);
   ptrdiff_t nmapped = mapcar1 (leni, args, function, sequence);
   ptrdiff_t nargs = 2 * nmapped - 1;
+  eassert (nmapped == leni);
 
-  for (ptrdiff_t i = nmapped - 1; i > 0; i--)
-    args[i + i] = args[i];
+  if (!NILP (Fequal (separator, empty_multibyte_string)))
+    nargs = nmapped;
+  else
+    {
+      for (ptrdiff_t i = nmapped - 1; i > 0; i--)
+        args[i + i] = args[i];
 
-  for (ptrdiff_t i = 1; i < nargs; i += 2)
-    args[i] = separator;
+      for (ptrdiff_t i = 1; i < nargs; i += 2)
+        args[i] = separator;
+    }
 
   Lisp_Object ret = Fconcat (nargs, args);
   SAFE_FREE ();