[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 ();
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master e75ce9ca38: * src/fns.c (Fmapconcat): Optimize the case where separator=="",
Stefan Monnier <=