aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKenichi Handa1997-05-28 04:36:36 +0000
committerKenichi Handa1997-05-28 04:36:36 +0000
commit8ac904700f147b40f8b1540b58fd3cefe2da5826 (patch)
treeffd62e0f66508fe140f80cd40254b6fb50b27e30 /src
parenta0615d9071e3b872db54a3d0f1285a53f956f75c (diff)
downloademacs-8ac904700f147b40f8b1540b58fd3cefe2da5826.tar.gz
emacs-8ac904700f147b40f8b1540b58fd3cefe2da5826.zip
(CHAR_TABLE_REF): Do not check validity of CT.
(CHAR_TABLE_SET): Likewise. (DOWNCASE_TABLE): Return case-table instead of the contents field. (UPCASE_TABLE): Likewise. (DOWNCASE): Use CHAR_TABLE_REF. (NOCASEP): Use UPCASE1. (UPCASE1): Use CHAR_TABLE_REF.
Diffstat (limited to 'src')
-rw-r--r--src/lisp.h48
1 files changed, 30 insertions, 18 deletions
diff --git a/src/lisp.h b/src/lisp.h
index cf2f4b30d86..2571036963c 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -608,22 +608,23 @@ struct Lisp_Vector
608 (((CT)->size & PSEUDOVECTOR_SIZE_MASK) - CHAR_TABLE_STANDARD_SLOTS) 608 (((CT)->size & PSEUDOVECTOR_SIZE_MASK) - CHAR_TABLE_STANDARD_SLOTS)
609 609
610/* Almost equivalent to Faref (CT, IDX) with optimization for ASCII 610/* Almost equivalent to Faref (CT, IDX) with optimization for ASCII
611 and 8-bit Europeans characters. Do not follow parent. */ 611 and 8-bit Europeans characters. For these characters, do not check
612#define CHAR_TABLE_REF(CT, IDX) \ 612 validity of CT. Do not follow parent. */
613 (CHAR_TABLE_P (CT) && IDX >= 0 && IDX < CHAR_TABLE_SINGLE_BYTE_SLOTS \ 613#define CHAR_TABLE_REF(CT, IDX) \
614 ? (!NILP (XCHAR_TABLE (CT)->contents[IDX]) \ 614 (XFASTINT (IDX) < CHAR_TABLE_SINGLE_BYTE_SLOTS \
615 ? XCHAR_TABLE (CT)->contents[IDX] \ 615 ? (!NILP (XCHAR_TABLE (CT)->contents[XFASTINT (IDX)])\
616 : XCHAR_TABLE (CT)->defalt) \ 616 ? XCHAR_TABLE (CT)->contents[XFASTINT (IDX)] \
617 : XCHAR_TABLE (CT)->defalt) \
617 : Faref (CT, IDX)) 618 : Faref (CT, IDX))
618 619
619/* Equivalent to Faset (CT, IDX, VAL) with optimization for ASCII and 620/* Equivalent to Faset (CT, IDX, VAL) with optimization for ASCII and
620 8-bit Europeans characters. */ 621 8-bit Europeans characters. Do not check validity of CT. */
621#define CHAR_TABLE_SET(CT, IDX, VAL) \ 622#define CHAR_TABLE_SET(CT, IDX, VAL) \
622 do { \ 623 do { \
623 if (CHAR_TABLE_P (CT) && IDX >= 0 && IDX < CHAR_TABLE_SINGLE_BYTE_SLOTS) \ 624 if (XFASTINT (IDX) < CHAR_TABLE_SINGLE_BYTE_SLOTS) \
624 XCHAR_TABLE (CT)->contents[IDX] = VAL; \ 625 XCHAR_TABLE (CT)->contents[XFASTINT (IDX)] = VAL; \
625 else \ 626 else \
626 Faset (CT, IDX, VAL); \ 627 Faset (CT, IDX, VAL); \
627 } while (0) 628 } while (0)
628 629
629struct Lisp_Char_Table 630struct Lisp_Char_Table
@@ -1315,17 +1316,24 @@ extern char *stack_bottom;
1315 1316
1316#define QUITP (!NILP (Vquit_flag) && NILP (Vinhibit_quit)) 1317#define QUITP (!NILP (Vquit_flag) && NILP (Vinhibit_quit))
1317 1318
1319/* Variables used locally in the following case handling macros. */
1320extern Lisp_Object case_temp1, case_temp2;
1321
1318/* Current buffer's map from characters to lower-case characters. */ 1322/* Current buffer's map from characters to lower-case characters. */
1319 1323
1320#define DOWNCASE_TABLE XCHAR_TABLE (current_buffer->downcase_table)->contents 1324#define DOWNCASE_TABLE current_buffer->downcase_table
1321 1325
1322/* Current buffer's map from characters to upper-case characters. */ 1326/* Current buffer's map from characters to upper-case characters. */
1323 1327
1324#define UPCASE_TABLE XCHAR_TABLE (current_buffer->upcase_table)->contents 1328#define UPCASE_TABLE current_buffer->upcase_table
1325 1329
1326/* Downcase a character, or make no change if that cannot be done. */ 1330/* Downcase a character, or make no change if that cannot be done. */
1327 1331
1328#define DOWNCASE(CH) (XFASTINT (DOWNCASE_TABLE[CH])) 1332#define DOWNCASE(CH) \
1333 ((case_temp1 = (CH), \
1334 case_temp2 = CHAR_TABLE_REF (DOWNCASE_TABLE, case_temp1), \
1335 NATNUMP (case_temp2)) \
1336 ? XFASTINT (case_temp2) : case_temp1)
1329 1337
1330/* 1 if CH is upper case. */ 1338/* 1 if CH is upper case. */
1331 1339
@@ -1333,7 +1341,7 @@ extern char *stack_bottom;
1333 1341
1334/* 1 if CH is neither upper nor lower case. */ 1342/* 1 if CH is neither upper nor lower case. */
1335 1343
1336#define NOCASEP(CH) (XFASTINT (UPCASE_TABLE[CH]) == (CH)) 1344#define NOCASEP(CH) (UPCASE1 (CH) == (CH))
1337 1345
1338/* 1 if CH is lower case. */ 1346/* 1 if CH is lower case. */
1339 1347
@@ -1345,7 +1353,11 @@ extern char *stack_bottom;
1345 1353
1346/* Upcase a character known to be not upper case. */ 1354/* Upcase a character known to be not upper case. */
1347 1355
1348#define UPCASE1(CH) (XFASTINT (UPCASE_TABLE[CH])) 1356#define UPCASE1(CH) \
1357 ((case_temp1 = (CH), \
1358 case_temp2 = CHAR_TABLE_REF (UPCASE_TABLE, case_temp1), \
1359 NATNUMP (case_temp2)) \
1360 ? XFASTINT (case_temp2) : case_temp1)
1349 1361
1350extern Lisp_Object Vascii_downcase_table; 1362extern Lisp_Object Vascii_downcase_table;
1351 1363