diff options
| author | Kim F. Storm | 2006-07-12 13:14:51 +0000 |
|---|---|---|
| committer | Kim F. Storm | 2006-07-12 13:14:51 +0000 |
| commit | 4e374bf2f8bb2c42165137ba9f3b50a87ebdcf2f (patch) | |
| tree | f3d371c922b045bf49f95b1d0300ec961522c51f /src/casefiddle.c | |
| parent | b08b1fc936688f92c4d9edc487c3fd18ca6460a8 (diff) | |
| download | emacs-4e374bf2f8bb2c42165137ba9f3b50a87ebdcf2f.tar.gz emacs-4e374bf2f8bb2c42165137ba9f3b50a87ebdcf2f.zip | |
(casify_object): Remove loop around wrong_type_argument.
Diffstat (limited to 'src/casefiddle.c')
| -rw-r--r-- | src/casefiddle.c | 108 |
1 files changed, 53 insertions, 55 deletions
diff --git a/src/casefiddle.c b/src/casefiddle.c index 02ec3f76b4e..76a24f48a82 100644 --- a/src/casefiddle.c +++ b/src/casefiddle.c | |||
| @@ -45,75 +45,73 @@ casify_object (flag, obj) | |||
| 45 | if (NILP (XCHAR_TABLE (current_buffer->downcase_table)->extras[1])) | 45 | if (NILP (XCHAR_TABLE (current_buffer->downcase_table)->extras[1])) |
| 46 | Fset_case_table (current_buffer->downcase_table); | 46 | Fset_case_table (current_buffer->downcase_table); |
| 47 | 47 | ||
| 48 | while (1) | 48 | if (INTEGERP (obj)) |
| 49 | { | 49 | { |
| 50 | if (INTEGERP (obj)) | 50 | int flagbits = (CHAR_ALT | CHAR_SUPER | CHAR_HYPER |
| 51 | | CHAR_SHIFT | CHAR_CTL | CHAR_META); | ||
| 52 | int flags = XINT (obj) & flagbits; | ||
| 53 | |||
| 54 | /* If the character has higher bits set | ||
| 55 | above the flags, return it unchanged. | ||
| 56 | It is not a real character. */ | ||
| 57 | if ((unsigned) XFASTINT (obj) > (unsigned) flagbits) | ||
| 58 | return obj; | ||
| 59 | |||
| 60 | c = DOWNCASE (XFASTINT (obj) & ~flagbits); | ||
| 61 | if (inword) | ||
| 62 | XSETFASTINT (obj, c | flags); | ||
| 63 | else if (c == (XFASTINT (obj) & ~flagbits)) | ||
| 51 | { | 64 | { |
| 52 | int flagbits = (CHAR_ALT | CHAR_SUPER | CHAR_HYPER | 65 | c = UPCASE1 ((XFASTINT (obj) & ~flagbits)); |
| 53 | | CHAR_SHIFT | CHAR_CTL | CHAR_META); | 66 | XSETFASTINT (obj, c | flags); |
| 54 | int flags = XINT (obj) & flagbits; | ||
| 55 | |||
| 56 | /* If the character has higher bits set | ||
| 57 | above the flags, return it unchanged. | ||
| 58 | It is not a real character. */ | ||
| 59 | if ((unsigned) XFASTINT (obj) > (unsigned) flagbits) | ||
| 60 | return obj; | ||
| 61 | |||
| 62 | c = DOWNCASE (XFASTINT (obj) & ~flagbits); | ||
| 63 | if (inword) | ||
| 64 | XSETFASTINT (obj, c | flags); | ||
| 65 | else if (c == (XFASTINT (obj) & ~flagbits)) | ||
| 66 | { | ||
| 67 | c = UPCASE1 ((XFASTINT (obj) & ~flagbits)); | ||
| 68 | XSETFASTINT (obj, c | flags); | ||
| 69 | } | ||
| 70 | return obj; | ||
| 71 | } | 67 | } |
| 68 | return obj; | ||
| 69 | } | ||
| 70 | |||
| 71 | if (STRINGP (obj)) | ||
| 72 | { | ||
| 73 | int multibyte = STRING_MULTIBYTE (obj); | ||
| 74 | int n; | ||
| 75 | |||
| 76 | obj = Fcopy_sequence (obj); | ||
| 77 | len = SBYTES (obj); | ||
| 72 | 78 | ||
| 73 | if (STRINGP (obj)) | 79 | /* I counts bytes, and N counts chars. */ |
| 80 | for (i = n = 0; i < len; n++) | ||
| 74 | { | 81 | { |
| 75 | int multibyte = STRING_MULTIBYTE (obj); | 82 | int from_len = 1, to_len = 1; |
| 76 | int n; | ||
| 77 | 83 | ||
| 78 | obj = Fcopy_sequence (obj); | 84 | c = SREF (obj, i); |
| 79 | len = SBYTES (obj); | ||
| 80 | 85 | ||
| 81 | /* I counts bytes, and N counts chars. */ | 86 | if (multibyte && c >= 0x80) |
| 82 | for (i = n = 0; i < len; n++) | 87 | c = STRING_CHAR_AND_LENGTH (SDATA (obj) + i, len -i, from_len); |
| 88 | if (inword && flag != CASE_CAPITALIZE_UP) | ||
| 89 | c = DOWNCASE (c); | ||
| 90 | else if (!UPPERCASEP (c) | ||
| 91 | && (!inword || flag != CASE_CAPITALIZE_UP)) | ||
| 92 | c = UPCASE1 (c); | ||
| 93 | if ((ASCII_BYTE_P (c) && from_len == 1) | ||
| 94 | || (! multibyte && SINGLE_BYTE_CHAR_P (c))) | ||
| 95 | SSET (obj, i, c); | ||
| 96 | else | ||
| 83 | { | 97 | { |
| 84 | int from_len = 1, to_len = 1; | 98 | to_len = CHAR_BYTES (c); |
| 85 | 99 | if (from_len == to_len) | |
| 86 | c = SREF (obj, i); | 100 | CHAR_STRING (c, SDATA (obj) + i); |
| 87 | |||
| 88 | if (multibyte && c >= 0x80) | ||
| 89 | c = STRING_CHAR_AND_LENGTH (SDATA (obj) + i, len -i, from_len); | ||
| 90 | if (inword && flag != CASE_CAPITALIZE_UP) | ||
| 91 | c = DOWNCASE (c); | ||
| 92 | else if (!UPPERCASEP (c) | ||
| 93 | && (!inword || flag != CASE_CAPITALIZE_UP)) | ||
| 94 | c = UPCASE1 (c); | ||
| 95 | if ((ASCII_BYTE_P (c) && from_len == 1) | ||
| 96 | || (! multibyte && SINGLE_BYTE_CHAR_P (c))) | ||
| 97 | SSET (obj, i, c); | ||
| 98 | else | 101 | else |
| 99 | { | 102 | { |
| 100 | to_len = CHAR_BYTES (c); | 103 | Faset (obj, make_number (n), make_number (c)); |
| 101 | if (from_len == to_len) | 104 | len += to_len - from_len; |
| 102 | CHAR_STRING (c, SDATA (obj) + i); | ||
| 103 | else | ||
| 104 | { | ||
| 105 | Faset (obj, make_number (n), make_number (c)); | ||
| 106 | len += to_len - from_len; | ||
| 107 | } | ||
| 108 | } | 105 | } |
| 109 | if ((int) flag >= (int) CASE_CAPITALIZE) | ||
| 110 | inword = SYNTAX (c) == Sword; | ||
| 111 | i += to_len; | ||
| 112 | } | 106 | } |
| 113 | return obj; | 107 | if ((int) flag >= (int) CASE_CAPITALIZE) |
| 108 | inword = SYNTAX (c) == Sword; | ||
| 109 | i += to_len; | ||
| 114 | } | 110 | } |
| 115 | obj = wrong_type_argument (Qchar_or_string_p, obj); | 111 | return obj; |
| 116 | } | 112 | } |
| 113 | |||
| 114 | return wrong_type_argument (Qchar_or_string_p, obj); | ||
| 117 | } | 115 | } |
| 118 | 116 | ||
| 119 | DEFUN ("upcase", Fupcase, Supcase, 1, 1, 0, | 117 | DEFUN ("upcase", Fupcase, Supcase, 1, 1, 0, |