From: Sean Whitton Date: Wed, 14 May 2025 17:43:22 +0000 (+0100) Subject: default_toplevel_binding, local_toplevel_binding: Loop upwards X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=42b1f7e145827e0067fcd2b9f8c83bfa0998a1fa;p=emacs.git default_toplevel_binding, local_toplevel_binding: Loop upwards * src/eval.c (default_toplevel_binding, local_toplevel_binding): Loop upwards, not downwards, given that we want the earliest relevant binding present in the stack. (cherry picked from commit f70bb4d7677ba308bf15f445ecc99e30754bad84) --- diff --git a/src/eval.c b/src/eval.c index ede79b9f77d..e3cdcb24423 100644 --- a/src/eval.c +++ b/src/eval.c @@ -741,43 +741,39 @@ Internal use only. */) static union specbinding * default_toplevel_binding (Lisp_Object symbol) { - union specbinding *binding = NULL; - union specbinding *pdl = specpdl_ptr; - while (pdl > specpdl) + for (union specbinding *pdl = specpdl; pdl < specpdl_ptr; ++pdl) { - switch ((--pdl)->kind) + switch (pdl->kind) { case SPECPDL_LET_DEFAULT: case SPECPDL_LET: if (EQ (specpdl_symbol (pdl), symbol)) - binding = pdl; + return pdl; break; default: break; } } - return binding; + return NULL; } static union specbinding * local_toplevel_binding (Lisp_Object symbol, Lisp_Object buf) { - union specbinding *binding = NULL; - union specbinding *pdl = specpdl_ptr; - while (pdl > specpdl) + for (union specbinding *pdl = specpdl; pdl < specpdl_ptr; ++pdl) { - switch ((--pdl)->kind) + switch (pdl->kind) { case SPECPDL_LET_LOCAL: if (BASE_EQ (specpdl_where (pdl), buf) && EQ (specpdl_symbol (pdl), symbol)) - binding = pdl; + return pdl; break; default: break; } } - return binding; + return NULL; } /* Look for a lexical-binding of SYMBOL somewhere up the stack.