diff options
| author | Kenichi Handa | 2009-08-25 00:48:59 +0000 |
|---|---|---|
| committer | Kenichi Handa | 2009-08-25 00:48:59 +0000 |
| commit | d9da2f452d42a1be3b7edd0fd2f346f1ff5632c4 (patch) | |
| tree | c1c55d85b766fddf5c2550376ae90bbff51277ff /src | |
| parent | 71e036af393543f324b9fe73077e94f295a22875 (diff) | |
| download | emacs-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/ChangeLog | 5 | ||||
| -rw-r--r-- | src/lisp.h | 34 |
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 @@ | |||
| 1 | 2009-08-25 Kenichi Handa <handa@m17n.org> | ||
| 2 | |||
| 3 | * lisp.h (CHAR_TABLE_REF_ASCII): New macro. | ||
| 4 | (CHAR_TABLE_REF): Use it. | ||
| 5 | |||
| 1 | 2009-08-23 Ken Raeburn <raeburn@raeburn.org> | 6 | 2009-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 |