aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKenichi Handa2009-08-25 00:48:59 +0000
committerKenichi Handa2009-08-25 00:48:59 +0000
commitd9da2f452d42a1be3b7edd0fd2f346f1ff5632c4 (patch)
treec1c55d85b766fddf5c2550376ae90bbff51277ff /src
parent71e036af393543f324b9fe73077e94f295a22875 (diff)
downloademacs-d9da2f452d42a1be3b7edd0fd2f346f1ff5632c4.tar.gz
emacs-d9da2f452d42a1be3b7edd0fd2f346f1ff5632c4.zip
(CHAR_TABLE_REF_ASCII): New macor.
(CHAR_TABLE_REF): Use it.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog5
-rw-r--r--src/lisp.h34
2 files changed, 34 insertions, 5 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index cdb12b68846..ef1d9b1d5e3 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
12009-08-25 Kenichi Handa <handa@m17n.org>
2
3 * lisp.h (CHAR_TABLE_REF_ASCII): New macro.
4 (CHAR_TABLE_REF): Use it.
5
12009-08-23 Ken Raeburn <raeburn@raeburn.org> 62009-08-23 Ken Raeburn <raeburn@raeburn.org>
2 7
3 * Makefile.in (emacs${EXEEXT}) [CANNOT_DUMP]: Set EMACSLOADPATH 8 * Makefile.in (emacs${EXEEXT}) [CANNOT_DUMP]: Set EMACSLOADPATH
diff --git a/src/lisp.h b/src/lisp.h
index 15de8d9e74f..385e0ad4d1e 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -793,13 +793,37 @@ struct Lisp_Vector
793#define CHAR_TABLE_EXTRA_SLOTS(CT) \ 793#define CHAR_TABLE_EXTRA_SLOTS(CT) \
794 (((CT)->size & PSEUDOVECTOR_SIZE_MASK) - CHAR_TABLE_STANDARD_SLOTS) 794 (((CT)->size & PSEUDOVECTOR_SIZE_MASK) - CHAR_TABLE_STANDARD_SLOTS)
795 795
796#ifdef __GNUC__
797
798#define CHAR_TABLE_REF_ASCII(CT, IDX) \
799 ({struct Lisp_Char_Table *_tbl = NULL; \
800 Lisp_Object _val; \
801 do { \
802 _tbl = _tbl ? XCHAR_TABLE (_tbl->parent) : XCHAR_TABLE (CT); \
803 _val = (! SUB_CHAR_TABLE_P (_tbl->ascii) ? _tbl->ascii \
804 : XSUB_CHAR_TABLE (_tbl->ascii)->contents[IDX]); \
805 if (NILP (_val)) \
806 _val = _tbl->defalt; \
807 } while (NILP (_val) && ! NILP (_tbl->parent)); \
808 _val; })
809
810#else /* not __GNUC__ */
811
812#define CHAR_TABLE_REF_ASCII(CT, IDX) \
813 (! NILP (XCHAR_TABLE (CT)->ascii) \
814 ? (! SUB_CHAR_TABLE_P (XCHAR_TABLE (CT)->ascii) \
815 ? XCHAR_TABLE (CT)->ascii \
816 : ! NILP (XSUB_CHAR_TABLE (XCHAR_TABLE (CT)->ascii)->contents[IDX]) \
817 ? XSUB_CHAR_TABLE (XCHAR_TABLE (CT)->ascii)->contents[IDX] \
818 : char_table_ref ((CT), (IDX))) \
819 : char_table_ref ((CT), (IDX)))
820
821#endif /* not __GNUC__ */
822
796/* Almost equivalent to Faref (CT, IDX) with optimization for ASCII 823/* Almost equivalent to Faref (CT, IDX) with optimization for ASCII
797 characters. Do not check validity of CT. */ 824 characters. Do not check validity of CT. */
798#define CHAR_TABLE_REF(CT, IDX) \ 825#define CHAR_TABLE_REF(CT, IDX) \
799 ((ASCII_CHAR_P (IDX) \ 826 (ASCII_CHAR_P (IDX) ? CHAR_TABLE_REF_ASCII ((CT), (IDX)) \
800 && SUB_CHAR_TABLE_P (XCHAR_TABLE (CT)->ascii) \
801 && !NILP (XSUB_CHAR_TABLE (XCHAR_TABLE (CT)->ascii)->contents[IDX])) \
802 ? XSUB_CHAR_TABLE (XCHAR_TABLE (CT)->ascii)->contents[IDX] \
803 : char_table_ref ((CT), (IDX))) 827 : char_table_ref ((CT), (IDX)))
804 828
805/* Almost equivalent to Faref (CT, IDX). However, if the result is 829/* Almost equivalent to Faref (CT, IDX). However, if the result is