]> git.eshelyaron.com Git - emacs.git/commitdiff
default_toplevel_binding, local_toplevel_binding: Loop upwards
authorSean Whitton <spwhitton@spwhitton.name>
Wed, 14 May 2025 17:43:22 +0000 (18:43 +0100)
committerEshel Yaron <me@eshelyaron.com>
Tue, 20 May 2025 20:51:30 +0000 (22:51 +0200)
* 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

index ede79b9f77d1cc6be406db1863dede1e16376f1c..e3cdcb244232d8a7049e2435b163f8b699ffddc1 100644 (file)
@@ -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.