emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 30966a6e67 04/11: Simplify CHAR_TABLE_REF_ASCII


From: Paul Eggert
Subject: master 30966a6e67 04/11: Simplify CHAR_TABLE_REF_ASCII
Date: Tue, 31 May 2022 04:26:59 -0400 (EDT)

branch: master
commit 30966a6e67ff5b599a2906b9e336ab5744786f06
Author: Paul Eggert <eggert@cs.ucla.edu>
Commit: Paul Eggert <eggert@cs.ucla.edu>

    Simplify CHAR_TABLE_REF_ASCII
    
    * src/lisp.h (CHAR_TABLE_REF_ASCII): Refactor as a straightforward
    for-loop.  Redo an if-then-else to be an (!if)-else-then as this
    is a bit cleaner, and it also works around GCC bug 105755.
---
 src/lisp.h | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/src/lisp.h b/src/lisp.h
index 3578ca57b4..ff6f0aaf54 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -2091,19 +2091,17 @@ XSUB_CHAR_TABLE (Lisp_Object a)
 INLINE Lisp_Object
 CHAR_TABLE_REF_ASCII (Lisp_Object ct, ptrdiff_t idx)
 {
-  struct Lisp_Char_Table *tbl = NULL;
-  Lisp_Object val;
-  do
+  for (struct Lisp_Char_Table *tbl = XCHAR_TABLE (ct); ;
+       tbl = XCHAR_TABLE (tbl->parent))
     {
-      tbl = tbl ? XCHAR_TABLE (tbl->parent) : XCHAR_TABLE (ct);
-      val = (! SUB_CHAR_TABLE_P (tbl->ascii) ? tbl->ascii
-            : XSUB_CHAR_TABLE (tbl->ascii)->contents[idx]);
+      Lisp_Object val = (SUB_CHAR_TABLE_P (tbl->ascii)
+                        ? XSUB_CHAR_TABLE (tbl->ascii)->contents[idx]
+                        : tbl->ascii);
       if (NILP (val))
        val = tbl->defalt;
+      if (!NILP (val) || NILP (tbl->parent))
+       return val;
     }
-  while (NILP (val) && ! NILP (tbl->parent));
-
-  return val;
 }
 
 /* Almost equivalent to Faref (CT, IDX) with optimization for ASCII



reply via email to

[Prev in Thread] Current Thread [Next in Thread]