From e75ce9ca384d2f0c52c2a5b53eb9cbac9111956f Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 16 Jun 2022 14:05:26 -0400 Subject: [PATCH] * 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 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 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 (); -- 2.39.5