emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] emacs/src lisp.h


From: Kenichi Handa
Subject: [Emacs-diffs] emacs/src lisp.h
Date: Tue, 25 Aug 2009 00:48:42 +0000

CVSROOT:        /cvsroot/emacs
Module name:    emacs
Changes by:     Kenichi Handa <handa>   09/08/25 00:48:42

Modified files:
        src            : lisp.h 

Log message:
        (CHAR_TABLE_REF_ASCII): New macor.
        (CHAR_TABLE_REF): Use it.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/emacs/src/lisp.h?cvsroot=emacs&r1=1.661&r2=1.662

Patches:
Index: lisp.h
===================================================================
RCS file: /cvsroot/emacs/emacs/src/lisp.h,v
retrieving revision 1.661
retrieving revision 1.662
diff -u -b -r1.661 -r1.662
--- lisp.h      17 Aug 2009 01:25:58 -0000      1.661
+++ lisp.h      25 Aug 2009 00:48:42 -0000      1.662
@@ -793,13 +793,37 @@
 #define CHAR_TABLE_EXTRA_SLOTS(CT)     \
   (((CT)->size & PSEUDOVECTOR_SIZE_MASK) - CHAR_TABLE_STANDARD_SLOTS)
 
+#ifdef __GNUC__
+
+#define CHAR_TABLE_REF_ASCII(CT, IDX)                                  \
+  ({struct Lisp_Char_Table *_tbl = NULL;                               \
+    Lisp_Object _val;                                                  \
+    do {                                                               \
+      _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]);          \
+      if (NILP (_val))                                                 \
+       _val = _tbl->defalt;                                            \
+    } while (NILP (_val) && ! NILP (_tbl->parent));                    \
+    _val; })
+      
+#else  /* not __GNUC__ */
+
+#define CHAR_TABLE_REF_ASCII(CT, IDX)                                    \
+  (! NILP (XCHAR_TABLE (CT)->ascii)                                      \
+   ? (! SUB_CHAR_TABLE_P (XCHAR_TABLE (CT)->ascii)                       \
+      ? XCHAR_TABLE (CT)->ascii                                                
  \
+      : ! NILP (XSUB_CHAR_TABLE (XCHAR_TABLE (CT)->ascii)->contents[IDX]) \
+      ? XSUB_CHAR_TABLE (XCHAR_TABLE (CT)->ascii)->contents[IDX]         \
+      : char_table_ref ((CT), (IDX)))                                    \
+   :  char_table_ref ((CT), (IDX)))
+
+#endif /* not __GNUC__ */
+
 /* Almost equivalent to Faref (CT, IDX) with optimization for ASCII
    characters.  Do not check validity of CT.  */
 #define CHAR_TABLE_REF(CT, IDX)                                                
 \
-  ((ASCII_CHAR_P (IDX)                                                  \
-    && SUB_CHAR_TABLE_P (XCHAR_TABLE (CT)->ascii)                       \
-    && !NILP (XSUB_CHAR_TABLE (XCHAR_TABLE (CT)->ascii)->contents[IDX])) \
-   ? XSUB_CHAR_TABLE (XCHAR_TABLE (CT)->ascii)->contents[IDX]           \
+  (ASCII_CHAR_P (IDX) ? CHAR_TABLE_REF_ASCII ((CT), (IDX))     \
    : char_table_ref ((CT), (IDX)))
 
 /* Almost equivalent to Faref (CT, IDX).  However, if the result is




reply via email to

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