From 82e928ea12f28ecc6c537667515b6843126c3b06 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mattias=20Engdeg=C3=A5rd?= Date: Sun, 14 Apr 2024 12:47:43 +0200 Subject: [PATCH] ; * src/eval.c (funcall_lambda): Sink specpdl load out of fast path. (cherry picked from commit 85ece8b494429b5ae36e79d7b4ad85a993f73543) --- src/eval.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/eval.c b/src/eval.c index f48d7b0682f..7f7a70b15ae 100644 --- a/src/eval.c +++ b/src/eval.c @@ -3158,13 +3158,9 @@ apply_lambda (Lisp_Object fun, Lisp_Object args, specpdl_ref count) or a module function. */ static Lisp_Object -funcall_lambda (Lisp_Object fun, ptrdiff_t nargs, - register Lisp_Object *arg_vector) +funcall_lambda (Lisp_Object fun, ptrdiff_t nargs, Lisp_Object *arg_vector) { - Lisp_Object val, syms_left, next, lexenv; - specpdl_ref count = SPECPDL_INDEX (); - ptrdiff_t i; - bool optional, rest; + Lisp_Object syms_left, lexenv; if (CONSP (fun)) { @@ -3211,13 +3207,16 @@ funcall_lambda (Lisp_Object fun, ptrdiff_t nargs, else emacs_abort (); - i = optional = rest = 0; + specpdl_ref count = SPECPDL_INDEX (); + ptrdiff_t i = 0; + bool optional = false; + bool rest = false; bool previous_rest = false; for (; CONSP (syms_left); syms_left = XCDR (syms_left)) { maybe_quit (); - next = XCAR (syms_left); + Lisp_Object next = XCAR (syms_left); if (!SYMBOLP (next)) xsignal1 (Qinvalid_function, fun); @@ -3269,6 +3268,7 @@ funcall_lambda (Lisp_Object fun, ptrdiff_t nargs, /* Instantiate a new lexical environment. */ specbind (Qinternal_interpreter_environment, lexenv); + Lisp_Object val; if (CONSP (fun)) val = Fprogn (XCDR (XCDR (fun))); else if (SUBR_NATIVE_COMPILEDP (fun)) -- 2.39.5