emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master e75ce9ca38: * src/fns.c (Fmapconcat): Optimize the case where sep


From: Stefan Monnier
Subject: master e75ce9ca38: * src/fns.c (Fmapconcat): Optimize the case where separator==""
Date: Thu, 16 Jun 2022 16:45:41 -0400 (EDT)

branch: master
commit e75ce9ca384d2f0c52c2a5b53eb9cbac9111956f
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>

    * src/fns.c (Fmapconcat): Optimize the case where separator==""
---
 src/fns.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/fns.c b/src/fns.c
index 4df944507c..a6ceac2935 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
   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 ();



reply via email to

[Prev in Thread] Current Thread [Next in Thread]