summaryrefslogtreecommitdiff
path: root/src/casefiddle.c
diff options
context:
space:
mode:
authorKim F. Storm <storm@cua.dk>2006-07-12 13:14:51 +0000
committerKim F. Storm <storm@cua.dk>2006-07-12 13:14:51 +0000
commit4e374bf2f8bb2c42165137ba9f3b50a87ebdcf2f (patch)
treef3d371c922b045bf49f95b1d0300ec961522c51f /src/casefiddle.c
parentb08b1fc936688f92c4d9edc487c3fd18ca6460a8 (diff)
(casify_object): Remove loop around wrong_type_argument.
Diffstat (limited to 'src/casefiddle.c')
-rw-r--r--src/casefiddle.c108
1 files changed, 53 insertions, 55 deletions
diff --git a/src/casefiddle.c b/src/casefiddle.c
index 02ec3f76b4..76a24f48a8 100644
--- a/src/casefiddle.c
+++ b/src/casefiddle.c
@@ -45,75 +45,73 @@ casify_object (flag, obj)
if (NILP (XCHAR_TABLE (current_buffer->downcase_table)->extras[1]))
Fset_case_table (current_buffer->downcase_table);
- while (1)
+ if (INTEGERP (obj))
{
- if (INTEGERP (obj))
+ int flagbits = (CHAR_ALT | CHAR_SUPER | CHAR_HYPER
+ | CHAR_SHIFT | CHAR_CTL | CHAR_META);
+ int flags = XINT (obj) & flagbits;
+
+ /* If the character has higher bits set
+ above the flags, return it unchanged.
+ It is not a real character. */
+ if ((unsigned) XFASTINT (obj) > (unsigned) flagbits)
+ return obj;
+
+ c = DOWNCASE (XFASTINT (obj) & ~flagbits);
+ if (inword)
+ XSETFASTINT (obj, c | flags);
+ else if (c == (XFASTINT (obj) & ~flagbits))
{
- int flagbits = (CHAR_ALT | CHAR_SUPER | CHAR_HYPER
- | CHAR_SHIFT | CHAR_CTL | CHAR_META);
- int flags = XINT (obj) & flagbits;
-
- /* If the character has higher bits set
- above the flags, return it unchanged.
- It is not a real character. */
- if ((unsigned) XFASTINT (obj) > (unsigned) flagbits)
- return obj;
-
- c = DOWNCASE (XFASTINT (obj) & ~flagbits);
- if (inword)
- XSETFASTINT (obj, c | flags);
- else if (c == (XFASTINT (obj) & ~flagbits))
- {
- c = UPCASE1 ((XFASTINT (obj) & ~flagbits));
- XSETFASTINT (obj, c | flags);
- }
- return obj;
+ c = UPCASE1 ((XFASTINT (obj) & ~flagbits));
+ XSETFASTINT (obj, c | flags);
}
+ return obj;
+ }
+
+ if (STRINGP (obj))
+ {
+ int multibyte = STRING_MULTIBYTE (obj);
+ int n;
+
+ obj = Fcopy_sequence (obj);
+ len = SBYTES (obj);
- if (STRINGP (obj))
+ /* I counts bytes, and N counts chars. */
+ for (i = n = 0; i < len; n++)
{
- int multibyte = STRING_MULTIBYTE (obj);
- int n;
+ int from_len = 1, to_len = 1;
- obj = Fcopy_sequence (obj);
- len = SBYTES (obj);
+ c = SREF (obj, i);
- /* I counts bytes, and N counts chars. */
- for (i = n = 0; i < len; n++)
+ if (multibyte && c >= 0x80)
+ c = STRING_CHAR_AND_LENGTH (SDATA (obj) + i, len -i, from_len);
+ if (inword && flag != CASE_CAPITALIZE_UP)
+ c = DOWNCASE (c);
+ else if (!UPPERCASEP (c)
+ && (!inword || flag != CASE_CAPITALIZE_UP))
+ c = UPCASE1 (c);
+ if ((ASCII_BYTE_P (c) && from_len == 1)
+ || (! multibyte && SINGLE_BYTE_CHAR_P (c)))
+ SSET (obj, i, c);
+ else
{
- int from_len = 1, to_len = 1;
-
- c = SREF (obj, i);
-
- if (multibyte && c >= 0x80)
- c = STRING_CHAR_AND_LENGTH (SDATA (obj) + i, len -i, from_len);
- if (inword && flag != CASE_CAPITALIZE_UP)
- c = DOWNCASE (c);
- else if (!UPPERCASEP (c)
- && (!inword || flag != CASE_CAPITALIZE_UP))
- c = UPCASE1 (c);
- if ((ASCII_BYTE_P (c) && from_len == 1)
- || (! multibyte && SINGLE_BYTE_CHAR_P (c)))
- SSET (obj, i, c);
+ to_len = CHAR_BYTES (c);
+ if (from_len == to_len)
+ CHAR_STRING (c, SDATA (obj) + i);
else
{
- to_len = CHAR_BYTES (c);
- if (from_len == to_len)
- CHAR_STRING (c, SDATA (obj) + i);
- else
- {
- Faset (obj, make_number (n), make_number (c));
- len += to_len - from_len;
- }
+ Faset (obj, make_number (n), make_number (c));
+ len += to_len - from_len;
}
- if ((int) flag >= (int) CASE_CAPITALIZE)
- inword = SYNTAX (c) == Sword;
- i += to_len;
}
- return obj;
+ if ((int) flag >= (int) CASE_CAPITALIZE)
+ inword = SYNTAX (c) == Sword;
+ i += to_len;
}
- obj = wrong_type_argument (Qchar_or_string_p, obj);
+ return obj;
}
+
+ return wrong_type_argument (Qchar_or_string_p, obj);
}
DEFUN ("upcase", Fupcase, Supcase, 1, 1, 0,