aboutsummaryrefslogtreecommitdiffstats
path: root/src/casefiddle.c
diff options
context:
space:
mode:
authorKim F. Storm2006-07-12 13:14:51 +0000
committerKim F. Storm2006-07-12 13:14:51 +0000
commit4e374bf2f8bb2c42165137ba9f3b50a87ebdcf2f (patch)
treef3d371c922b045bf49f95b1d0300ec961522c51f /src/casefiddle.c
parentb08b1fc936688f92c4d9edc487c3fd18ca6460a8 (diff)
downloademacs-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.c108
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
119DEFUN ("upcase", Fupcase, Supcase, 1, 1, 0, 117DEFUN ("upcase", Fupcase, Supcase, 1, 1, 0,