aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Eggert2011-03-15 14:14:06 -0700
committerPaul Eggert2011-03-15 14:14:06 -0700
commit5da9919f99ebacbc511113134ef8f687a562d5b8 (patch)
tree93ca25d179a3ad53796e4132fc98c06ecb704a91
parentb313f9d86378db4dd4619923572b07513c53ceac (diff)
downloademacs-5da9919f99ebacbc511113134ef8f687a562d5b8.tar.gz
emacs-5da9919f99ebacbc511113134ef8f687a562d5b8.zip
Use functions, not macros, for up- and down-casing.
-rw-r--r--src/buffer.h58
-rw-r--r--src/casefiddle.c22
-rw-r--r--src/dired.c4
-rw-r--r--src/editfns.c10
-rw-r--r--src/fileio.c2
-rw-r--r--src/keyboard.c8
-rw-r--r--src/process.c2
-rw-r--r--src/regex.c4
-rw-r--r--src/search.c4
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 1031static inline int
1032#define DOWNCASE_TABLE BVAR (current_buffer, downcase_table) 1032downcase (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
1040static inline EMACS_INT
1041downcase (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. */
1040static 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 1043static inline int
1058#define LOWERCASEP(CH) (!UPPERCASEP (CH) && !NOCASEP(CH)) 1044upcase1 (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
1066static inline EMACS_INT
1067upcase1 (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. */
1052static 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. */
1056static 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)