diff options
| author | Paul Eggert | 2011-03-15 14:14:06 -0700 |
|---|---|---|
| committer | Paul Eggert | 2011-03-15 14:14:06 -0700 |
| commit | 5da9919f99ebacbc511113134ef8f687a562d5b8 (patch) | |
| tree | 93ca25d179a3ad53796e4132fc98c06ecb704a91 | |
| parent | b313f9d86378db4dd4619923572b07513c53ceac (diff) | |
| download | emacs-5da9919f99ebacbc511113134ef8f687a562d5b8.tar.gz emacs-5da9919f99ebacbc511113134ef8f687a562d5b8.zip | |
Use functions, not macros, for up- and down-casing.
| -rw-r--r-- | src/buffer.h | 58 | ||||
| -rw-r--r-- | src/casefiddle.c | 22 | ||||
| -rw-r--r-- | src/dired.c | 4 | ||||
| -rw-r--r-- | src/editfns.c | 10 | ||||
| -rw-r--r-- | src/fileio.c | 2 | ||||
| -rw-r--r-- | src/keyboard.c | 8 | ||||
| -rw-r--r-- | src/process.c | 2 | ||||
| -rw-r--r-- | src/regex.c | 4 | ||||
| -rw-r--r-- | src/search.c | 4 |
9 files changed, 49 insertions, 65 deletions
diff --git a/src/buffer.h b/src/buffer.h index 996e4e59c27..d80875a0811 100644 --- a/src/buffer.h +++ b/src/buffer.h | |||
| @@ -1027,46 +1027,30 @@ extern int last_per_buffer_idx; | |||
| 1027 | #define PER_BUFFER_VALUE(BUFFER, OFFSET) \ | 1027 | #define PER_BUFFER_VALUE(BUFFER, OFFSET) \ |
| 1028 | (*(Lisp_Object *)((OFFSET) + (char *) (BUFFER))) | 1028 | (*(Lisp_Object *)((OFFSET) + (char *) (BUFFER))) |
| 1029 | 1029 | ||
| 1030 | /* Current buffer's map from characters to lower-case characters. */ | 1030 | /* Downcase a character C, or make no change if that cannot be done. */ |
| 1031 | 1031 | static inline int | |
| 1032 | #define DOWNCASE_TABLE BVAR (current_buffer, downcase_table) | 1032 | downcase (int c) |
| 1033 | |||
| 1034 | /* Current buffer's map from characters to upper-case characters. */ | ||
| 1035 | |||
| 1036 | #define UPCASE_TABLE BVAR (current_buffer, upcase_table) | ||
| 1037 | |||
| 1038 | /* Downcase a character, or make no change if that cannot be done. */ | ||
| 1039 | |||
| 1040 | static inline EMACS_INT | ||
| 1041 | downcase (int ch) | ||
| 1042 | { | 1033 | { |
| 1043 | Lisp_Object down = CHAR_TABLE_REF (DOWNCASE_TABLE, ch); | 1034 | Lisp_Object downcase_table = BVAR (current_buffer, downcase_table); |
| 1044 | return NATNUMP (down) ? XFASTINT (down) : ch; | 1035 | Lisp_Object down = CHAR_TABLE_REF (downcase_table, c); |
| 1036 | return NATNUMP (down) ? XFASTINT (down) : c; | ||
| 1045 | } | 1037 | } |
| 1046 | #define DOWNCASE(CH) downcase (CH) | ||
| 1047 | |||
| 1048 | /* 1 if CH is upper case. */ | ||
| 1049 | |||
| 1050 | #define UPPERCASEP(CH) (DOWNCASE (CH) != (CH)) | ||
| 1051 | |||
| 1052 | /* 1 if CH is neither upper nor lower case. */ | ||
| 1053 | 1038 | ||
| 1054 | #define NOCASEP(CH) (UPCASE1 (CH) == (CH)) | 1039 | /* 1 if C is upper case. */ |
| 1040 | static inline int uppercasep (int c) { return downcase (c) != c; } | ||
| 1055 | 1041 | ||
| 1056 | /* 1 if CH is lower case. */ | 1042 | /* Upcase a character C known to be not upper case. */ |
| 1057 | 1043 | static inline int | |
| 1058 | #define LOWERCASEP(CH) (!UPPERCASEP (CH) && !NOCASEP(CH)) | 1044 | upcase1 (int c) |
| 1059 | |||
| 1060 | /* Upcase a character, or make no change if that cannot be done. */ | ||
| 1061 | |||
| 1062 | #define UPCASE(CH) (!UPPERCASEP (CH) ? UPCASE1 (CH) : (CH)) | ||
| 1063 | |||
| 1064 | /* Upcase a character known to be not upper case. */ | ||
| 1065 | |||
| 1066 | static inline EMACS_INT | ||
| 1067 | upcase1 (int ch) | ||
| 1068 | { | 1045 | { |
| 1069 | Lisp_Object up = CHAR_TABLE_REF (UPCASE_TABLE, ch); | 1046 | Lisp_Object upcase_table = BVAR (current_buffer, upcase_table); |
| 1070 | return NATNUMP (up) ? XFASTINT (up) : ch; | 1047 | Lisp_Object up = CHAR_TABLE_REF (upcase_table, c); |
| 1048 | return NATNUMP (up) ? XFASTINT (up) : c; | ||
| 1071 | } | 1049 | } |
| 1072 | #define UPCASE1(CH) upcase1 (CH) | 1050 | |
| 1051 | /* 1 if C is lower case. */ | ||
| 1052 | static inline int lowercasep (int c) | ||
| 1053 | { return !uppercasep (c) && upcase1 (c) != c; } | ||
| 1054 | |||
| 1055 | /* Upcase a character C, or make no change if that cannot be done. */ | ||
| 1056 | static inline int upcase (int c) { return uppercasep (c) ? c : upcase1 (c); } | ||
diff --git a/src/casefiddle.c b/src/casefiddle.c index d2c7e572125..43ecd38dc7d 100644 --- a/src/casefiddle.c +++ b/src/casefiddle.c | |||
| @@ -64,13 +64,13 @@ casify_object (enum case_action flag, Lisp_Object obj) | |||
| 64 | multibyte = 1; | 64 | multibyte = 1; |
| 65 | if (! multibyte) | 65 | if (! multibyte) |
| 66 | MAKE_CHAR_MULTIBYTE (c1); | 66 | MAKE_CHAR_MULTIBYTE (c1); |
| 67 | c = DOWNCASE (c1); | 67 | c = downcase (c1); |
| 68 | if (inword) | 68 | if (inword) |
| 69 | XSETFASTINT (obj, c | flags); | 69 | XSETFASTINT (obj, c | flags); |
| 70 | else if (c == (XFASTINT (obj) & ~flagbits)) | 70 | else if (c == (XFASTINT (obj) & ~flagbits)) |
| 71 | { | 71 | { |
| 72 | if (! inword) | 72 | if (! inword) |
| 73 | c = UPCASE1 (c1); | 73 | c = upcase1 (c1); |
| 74 | if (! multibyte) | 74 | if (! multibyte) |
| 75 | MAKE_CHAR_UNIBYTE (c); | 75 | MAKE_CHAR_UNIBYTE (c); |
| 76 | XSETFASTINT (obj, c | flags); | 76 | XSETFASTINT (obj, c | flags); |
| @@ -92,10 +92,10 @@ casify_object (enum case_action flag, Lisp_Object obj) | |||
| 92 | MAKE_CHAR_MULTIBYTE (c); | 92 | MAKE_CHAR_MULTIBYTE (c); |
| 93 | c1 = c; | 93 | c1 = c; |
| 94 | if (inword && flag != CASE_CAPITALIZE_UP) | 94 | if (inword && flag != CASE_CAPITALIZE_UP) |
| 95 | c = DOWNCASE (c); | 95 | c = downcase (c); |
| 96 | else if (!UPPERCASEP (c) | 96 | else if (!uppercasep (c) |
| 97 | && (!inword || flag != CASE_CAPITALIZE_UP)) | 97 | && (!inword || flag != CASE_CAPITALIZE_UP)) |
| 98 | c = UPCASE1 (c1); | 98 | c = upcase1 (c1); |
| 99 | if ((int) flag >= (int) CASE_CAPITALIZE) | 99 | if ((int) flag >= (int) CASE_CAPITALIZE) |
| 100 | inword = (SYNTAX (c) == Sword); | 100 | inword = (SYNTAX (c) == Sword); |
| 101 | if (c != c1) | 101 | if (c != c1) |
| @@ -133,10 +133,10 @@ casify_object (enum case_action flag, Lisp_Object obj) | |||
| 133 | } | 133 | } |
| 134 | c = STRING_CHAR_AND_LENGTH (SDATA (obj) + i_byte, len); | 134 | c = STRING_CHAR_AND_LENGTH (SDATA (obj) + i_byte, len); |
| 135 | if (inword && flag != CASE_CAPITALIZE_UP) | 135 | if (inword && flag != CASE_CAPITALIZE_UP) |
| 136 | c = DOWNCASE (c); | 136 | c = downcase (c); |
| 137 | else if (!UPPERCASEP (c) | 137 | else if (!uppercasep (c) |
| 138 | && (!inword || flag != CASE_CAPITALIZE_UP)) | 138 | && (!inword || flag != CASE_CAPITALIZE_UP)) |
| 139 | c = UPCASE1 (c); | 139 | c = upcase1 (c); |
| 140 | if ((int) flag >= (int) CASE_CAPITALIZE) | 140 | if ((int) flag >= (int) CASE_CAPITALIZE) |
| 141 | inword = (SYNTAX (c) == Sword); | 141 | inword = (SYNTAX (c) == Sword); |
| 142 | o += CHAR_STRING (c, o); | 142 | o += CHAR_STRING (c, o); |
| @@ -243,10 +243,10 @@ casify_region (enum case_action flag, Lisp_Object b, Lisp_Object e) | |||
| 243 | } | 243 | } |
| 244 | c2 = c; | 244 | c2 = c; |
| 245 | if (inword && flag != CASE_CAPITALIZE_UP) | 245 | if (inword && flag != CASE_CAPITALIZE_UP) |
| 246 | c = DOWNCASE (c); | 246 | c = downcase (c); |
| 247 | else if (!UPPERCASEP (c) | 247 | else if (!uppercasep (c) |
| 248 | && (!inword || flag != CASE_CAPITALIZE_UP)) | 248 | && (!inword || flag != CASE_CAPITALIZE_UP)) |
| 249 | c = UPCASE1 (c); | 249 | c = upcase1 (c); |
| 250 | if ((int) flag >= (int) CASE_CAPITALIZE) | 250 | if ((int) flag >= (int) CASE_CAPITALIZE) |
| 251 | inword = ((SYNTAX (c) == Sword) | 251 | inword = ((SYNTAX (c) == Sword) |
| 252 | && (inword || !syntax_prefix_flag_p (c))); | 252 | && (inword || !syntax_prefix_flag_p (c))); |
diff --git a/src/dired.c b/src/dired.c index 3e2ce5e96a6..176f14925b4 100644 --- a/src/dired.c +++ b/src/dired.c | |||
| @@ -790,8 +790,8 @@ scmp (const char *s1, const char *s2, int len) | |||
| 790 | if (completion_ignore_case) | 790 | if (completion_ignore_case) |
| 791 | { | 791 | { |
| 792 | while (l | 792 | while (l |
| 793 | && (DOWNCASE ((unsigned char) *s1++) | 793 | && (downcase ((unsigned char) *s1++) |
| 794 | == DOWNCASE ((unsigned char) *s2++))) | 794 | == downcase ((unsigned char) *s2++))) |
| 795 | l--; | 795 | l--; |
| 796 | } | 796 | } |
| 797 | else | 797 | else |
diff --git a/src/editfns.c b/src/editfns.c index d92d3482d09..59cf269ef7b 100644 --- a/src/editfns.c +++ b/src/editfns.c | |||
| @@ -1374,7 +1374,7 @@ name, or nil if there is no such user. */) | |||
| 1374 | memcpy (r, p, q - p); | 1374 | memcpy (r, p, q - p); |
| 1375 | r[q - p] = 0; | 1375 | r[q - p] = 0; |
| 1376 | strcat (r, SSDATA (login)); | 1376 | strcat (r, SSDATA (login)); |
| 1377 | r[q - p] = UPCASE ((unsigned char) r[q - p]); | 1377 | r[q - p] = upcase ((unsigned char) r[q - p]); |
| 1378 | strcat (r, q + 1); | 1378 | strcat (r, q + 1); |
| 1379 | full = build_string (r); | 1379 | full = build_string (r); |
| 1380 | } | 1380 | } |
| @@ -4213,7 +4213,7 @@ Case is ignored if `case-fold-search' is non-nil in the current buffer. */) | |||
| 4213 | { | 4213 | { |
| 4214 | int i1, i2; | 4214 | int i1, i2; |
| 4215 | /* Check they're chars, not just integers, otherwise we could get array | 4215 | /* Check they're chars, not just integers, otherwise we could get array |
| 4216 | bounds violations in DOWNCASE. */ | 4216 | bounds violations in downcase. */ |
| 4217 | CHECK_CHARACTER (c1); | 4217 | CHECK_CHARACTER (c1); |
| 4218 | CHECK_CHARACTER (c2); | 4218 | CHECK_CHARACTER (c2); |
| 4219 | 4219 | ||
| @@ -4224,7 +4224,7 @@ Case is ignored if `case-fold-search' is non-nil in the current buffer. */) | |||
| 4224 | 4224 | ||
| 4225 | /* Do these in separate statements, | 4225 | /* Do these in separate statements, |
| 4226 | then compare the variables. | 4226 | then compare the variables. |
| 4227 | because of the way DOWNCASE uses temp variables. */ | 4227 | because of the way downcase uses temp variables. */ |
| 4228 | i1 = XFASTINT (c1); | 4228 | i1 = XFASTINT (c1); |
| 4229 | if (NILP (BVAR (current_buffer, enable_multibyte_characters)) | 4229 | if (NILP (BVAR (current_buffer, enable_multibyte_characters)) |
| 4230 | && ! ASCII_CHAR_P (i1)) | 4230 | && ! ASCII_CHAR_P (i1)) |
| @@ -4237,8 +4237,8 @@ Case is ignored if `case-fold-search' is non-nil in the current buffer. */) | |||
| 4237 | { | 4237 | { |
| 4238 | MAKE_CHAR_MULTIBYTE (i2); | 4238 | MAKE_CHAR_MULTIBYTE (i2); |
| 4239 | } | 4239 | } |
| 4240 | i1 = DOWNCASE (i1); | 4240 | i1 = downcase (i1); |
| 4241 | i2 = DOWNCASE (i2); | 4241 | i2 = downcase (i2); |
| 4242 | return (i1 == i2 ? Qt : Qnil); | 4242 | return (i1 == i2 ? Qt : Qnil); |
| 4243 | } | 4243 | } |
| 4244 | 4244 | ||
diff --git a/src/fileio.c b/src/fileio.c index 826f2c18fbf..5d33fb93878 100644 --- a/src/fileio.c +++ b/src/fileio.c | |||
| @@ -178,7 +178,7 @@ report_file_error (const char *string, Lisp_Object data) | |||
| 178 | 178 | ||
| 179 | str = SSDATA (errstring); | 179 | str = SSDATA (errstring); |
| 180 | c = STRING_CHAR ((unsigned char *) str); | 180 | c = STRING_CHAR ((unsigned char *) str); |
| 181 | Faset (errstring, make_number (0), make_number (DOWNCASE (c))); | 181 | Faset (errstring, make_number (0), make_number (downcase (c))); |
| 182 | } | 182 | } |
| 183 | 183 | ||
| 184 | xsignal (Qfile_error, | 184 | xsignal (Qfile_error, |
diff --git a/src/keyboard.c b/src/keyboard.c index 2a2e24f3b1b..fc8622de0a1 100644 --- a/src/keyboard.c +++ b/src/keyboard.c | |||
| @@ -9836,7 +9836,7 @@ read_key_sequence (Lisp_Object *keybuf, int bufsize, Lisp_Object prompt, | |||
| 9836 | && /* indec.start >= t && fkey.start >= t && */ keytran.start >= t | 9836 | && /* indec.start >= t && fkey.start >= t && */ keytran.start >= t |
| 9837 | && INTEGERP (key) | 9837 | && INTEGERP (key) |
| 9838 | && ((CHARACTERP (make_number (XINT (key) & ~CHAR_MODIFIER_MASK)) | 9838 | && ((CHARACTERP (make_number (XINT (key) & ~CHAR_MODIFIER_MASK)) |
| 9839 | && UPPERCASEP (XINT (key) & ~CHAR_MODIFIER_MASK)) | 9839 | && uppercasep (XINT (key) & ~CHAR_MODIFIER_MASK)) |
| 9840 | || (XINT (key) & shift_modifier))) | 9840 | || (XINT (key) & shift_modifier))) |
| 9841 | { | 9841 | { |
| 9842 | Lisp_Object new_key; | 9842 | Lisp_Object new_key; |
| @@ -9847,7 +9847,7 @@ read_key_sequence (Lisp_Object *keybuf, int bufsize, Lisp_Object prompt, | |||
| 9847 | if (XINT (key) & shift_modifier) | 9847 | if (XINT (key) & shift_modifier) |
| 9848 | XSETINT (new_key, XINT (key) & ~shift_modifier); | 9848 | XSETINT (new_key, XINT (key) & ~shift_modifier); |
| 9849 | else | 9849 | else |
| 9850 | XSETINT (new_key, (DOWNCASE (XINT (key) & ~CHAR_MODIFIER_MASK) | 9850 | XSETINT (new_key, (downcase (XINT (key) & ~CHAR_MODIFIER_MASK) |
| 9851 | | (XINT (key) & CHAR_MODIFIER_MASK))); | 9851 | | (XINT (key) & CHAR_MODIFIER_MASK))); |
| 9852 | 9852 | ||
| 9853 | /* We have to do this unconditionally, regardless of whether | 9853 | /* We have to do this unconditionally, regardless of whether |
| @@ -9875,13 +9875,13 @@ read_key_sequence (Lisp_Object *keybuf, int bufsize, Lisp_Object prompt, | |||
| 9875 | || (INTEGERP (key) | 9875 | || (INTEGERP (key) |
| 9876 | && (KEY_TO_CHAR (key) | 9876 | && (KEY_TO_CHAR (key) |
| 9877 | < XCHAR_TABLE (BVAR (current_buffer, downcase_table))->size) | 9877 | < XCHAR_TABLE (BVAR (current_buffer, downcase_table))->size) |
| 9878 | && UPPERCASEP (KEY_TO_CHAR (key)))) | 9878 | && uppercasep (KEY_TO_CHAR (key)))) |
| 9879 | { | 9879 | { |
| 9880 | Lisp_Object new_key | 9880 | Lisp_Object new_key |
| 9881 | = (modifiers & shift_modifier | 9881 | = (modifiers & shift_modifier |
| 9882 | ? apply_modifiers (modifiers & ~shift_modifier, | 9882 | ? apply_modifiers (modifiers & ~shift_modifier, |
| 9883 | XCAR (breakdown)) | 9883 | XCAR (breakdown)) |
| 9884 | : make_number (DOWNCASE (KEY_TO_CHAR (key)) | modifiers)); | 9884 | : make_number (downcase (KEY_TO_CHAR (key)) | modifiers)); |
| 9885 | 9885 | ||
| 9886 | original_uppercase = key; | 9886 | original_uppercase = key; |
| 9887 | original_uppercase_position = t - 1; | 9887 | original_uppercase_position = t - 1; |
diff --git a/src/process.c b/src/process.c index c8f329c244b..7bfd2a3258a 100644 --- a/src/process.c +++ b/src/process.c | |||
| @@ -495,7 +495,7 @@ status_message (struct Lisp_Process *p) | |||
| 495 | string = (code_convert_string_norecord | 495 | string = (code_convert_string_norecord |
| 496 | (string, Vlocale_coding_system, 0)); | 496 | (string, Vlocale_coding_system, 0)); |
| 497 | c1 = STRING_CHAR (SDATA (string)); | 497 | c1 = STRING_CHAR (SDATA (string)); |
| 498 | c2 = DOWNCASE (c1); | 498 | c2 = downcase (c1); |
| 499 | if (c1 != c2) | 499 | if (c1 != c2) |
| 500 | Faset (string, make_number (0), make_number (c2)); | 500 | Faset (string, make_number (0), make_number (c2)); |
| 501 | } | 501 | } |
diff --git a/src/regex.c b/src/regex.c index 4194ccc7c00..e6d0da96312 100644 --- a/src/regex.c +++ b/src/regex.c | |||
| @@ -340,7 +340,7 @@ enum syntaxcode { Swhitespace = 0, Sword = 1, Ssymbol = 2 }; | |||
| 340 | || ((c) >= 'A' && (c) <= 'Z')) \ | 340 | || ((c) >= 'A' && (c) <= 'Z')) \ |
| 341 | : SYNTAX (c) == Sword) | 341 | : SYNTAX (c) == Sword) |
| 342 | 342 | ||
| 343 | # define ISLOWER(c) (LOWERCASEP (c)) | 343 | # define ISLOWER(c) lowercasep (c) |
| 344 | 344 | ||
| 345 | # define ISPUNCT(c) (IS_REAL_ASCII (c) \ | 345 | # define ISPUNCT(c) (IS_REAL_ASCII (c) \ |
| 346 | ? ((c) > ' ' && (c) < 0177 \ | 346 | ? ((c) > ' ' && (c) < 0177 \ |
| @@ -351,7 +351,7 @@ enum syntaxcode { Swhitespace = 0, Sword = 1, Ssymbol = 2 }; | |||
| 351 | 351 | ||
| 352 | # define ISSPACE(c) (SYNTAX (c) == Swhitespace) | 352 | # define ISSPACE(c) (SYNTAX (c) == Swhitespace) |
| 353 | 353 | ||
| 354 | # define ISUPPER(c) (UPPERCASEP (c)) | 354 | # define ISUPPER(c) uppercasep (c) |
| 355 | 355 | ||
| 356 | # define ISWORD(c) (SYNTAX (c) == Sword) | 356 | # define ISWORD(c) (SYNTAX (c) == Sword) |
| 357 | 357 | ||
diff --git a/src/search.c b/src/search.c index 9869a7aad55..bf93a7fe442 100644 --- a/src/search.c +++ b/src/search.c | |||
| @@ -2469,7 +2469,7 @@ since only regular expressions have distinguished subexpressions. */) | |||
| 2469 | else | 2469 | else |
| 2470 | FETCH_STRING_CHAR_AS_MULTIBYTE_ADVANCE (c, string, pos, pos_byte); | 2470 | FETCH_STRING_CHAR_AS_MULTIBYTE_ADVANCE (c, string, pos, pos_byte); |
| 2471 | 2471 | ||
| 2472 | if (LOWERCASEP (c)) | 2472 | if (lowercasep (c)) |
| 2473 | { | 2473 | { |
| 2474 | /* Cannot be all caps if any original char is lower case */ | 2474 | /* Cannot be all caps if any original char is lower case */ |
| 2475 | 2475 | ||
| @@ -2479,7 +2479,7 @@ since only regular expressions have distinguished subexpressions. */) | |||
| 2479 | else | 2479 | else |
| 2480 | some_multiletter_word = 1; | 2480 | some_multiletter_word = 1; |
| 2481 | } | 2481 | } |
| 2482 | else if (UPPERCASEP (c)) | 2482 | else if (uppercasep (c)) |
| 2483 | { | 2483 | { |
| 2484 | some_uppercase = 1; | 2484 | some_uppercase = 1; |
| 2485 | if (SYNTAX (prevc) != Sword) | 2485 | if (SYNTAX (prevc) != Sword) |