aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMattias EngdegÄrd2024-04-14 12:47:43 +0200
committerMattias EngdegÄrd2024-04-14 12:47:43 +0200
commit85ece8b494429b5ae36e79d7b4ad85a993f73543 (patch)
tree48234de1479ffe39cae5ffcb3284cf0180ae02f1 /src
parent616af565796f8c690dd9c7d1b2fa7607f2e2fa1e (diff)
downloademacs-85ece8b494429b5ae36e79d7b4ad85a993f73543.tar.gz
emacs-85ece8b494429b5ae36e79d7b4ad85a993f73543.zip
; * src/eval.c (funcall_lambda): Sink specpdl load out of fast path.
Diffstat (limited to 'src')
-rw-r--r--src/eval.c16
1 files 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)
3158 or a module function. */ 3158 or a module function. */
3159 3159
3160static Lisp_Object 3160static Lisp_Object
3161funcall_lambda (Lisp_Object fun, ptrdiff_t nargs, 3161funcall_lambda (Lisp_Object fun, ptrdiff_t nargs, Lisp_Object *arg_vector)
3162 register Lisp_Object *arg_vector)
3163{ 3162{
3164 Lisp_Object val, syms_left, next, lexenv; 3163 Lisp_Object syms_left, lexenv;
3165 specpdl_ref count = SPECPDL_INDEX ();
3166 ptrdiff_t i;
3167 bool optional, rest;
3168 3164
3169 if (CONSP (fun)) 3165 if (CONSP (fun))
3170 { 3166 {
@@ -3211,13 +3207,16 @@ funcall_lambda (Lisp_Object fun, ptrdiff_t nargs,
3211 else 3207 else
3212 emacs_abort (); 3208 emacs_abort ();
3213 3209
3214 i = optional = rest = 0; 3210 specpdl_ref count = SPECPDL_INDEX ();
3211 ptrdiff_t i = 0;
3212 bool optional = false;
3213 bool rest = false;
3215 bool previous_rest = false; 3214 bool previous_rest = false;
3216 for (; CONSP (syms_left); syms_left = XCDR (syms_left)) 3215 for (; CONSP (syms_left); syms_left = XCDR (syms_left))
3217 { 3216 {
3218 maybe_quit (); 3217 maybe_quit ();
3219 3218
3220 next = XCAR (syms_left); 3219 Lisp_Object next = XCAR (syms_left);
3221 if (!SYMBOLP (next)) 3220 if (!SYMBOLP (next))
3222 xsignal1 (Qinvalid_function, fun); 3221 xsignal1 (Qinvalid_function, fun);
3223 3222
@@ -3269,6 +3268,7 @@ funcall_lambda (Lisp_Object fun, ptrdiff_t nargs,
3269 /* Instantiate a new lexical environment. */ 3268 /* Instantiate a new lexical environment. */
3270 specbind (Qinternal_interpreter_environment, lexenv); 3269 specbind (Qinternal_interpreter_environment, lexenv);
3271 3270
3271 Lisp_Object val;
3272 if (CONSP (fun)) 3272 if (CONSP (fun))
3273 val = Fprogn (XCDR (XCDR (fun))); 3273 val = Fprogn (XCDR (XCDR (fun)));
3274 else if (SUBR_NATIVE_COMPILEDP (fun)) 3274 else if (SUBR_NATIVE_COMPILEDP (fun))