From 42b1f7e145827e0067fcd2b9f8c83bfa0998a1fa Mon Sep 17 00:00:00 2001 From: Sean Whitton Date: Wed, 14 May 2025 18:43:22 +0100 Subject: [PATCH] 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) --- src/eval.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) 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. -- 2.39.5