aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKarl Heuer1997-02-22 19:31:56 +0000
committerKarl Heuer1997-02-22 19:31:56 +0000
commite22e428338c071aca0bc154b7fc0bc47e2999421 (patch)
tree5ed676287f9ca7beb6a953cf2d11fcc05cb5054b /src
parent6fdaa9a05da1a0dbcb26d70a10d7e8c109347a8e (diff)
downloademacs-e22e428338c071aca0bc154b7fc0bc47e2999421.tar.gz
emacs-e22e428338c071aca0bc154b7fc0bc47e2999421.zip
(Fcopy_sequence, concat, internal_equal, Ffillarray):
Fix a bug of miscalculation of `size_in_chars' of a bool vector. (Fset_char_table_range): When range is vector, make the original char table deeper if necessary.
Diffstat (limited to 'src')
-rw-r--r--src/fns.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/fns.c b/src/fns.c
index 7991403eea4..f145f8110a0 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -326,7 +326,7 @@ with the original.")
326 { 326 {
327 Lisp_Object val; 327 Lisp_Object val;
328 int size_in_chars 328 int size_in_chars
329 = (XBOOL_VECTOR (arg)->size + BITS_PER_CHAR) / BITS_PER_CHAR; 329 = (XBOOL_VECTOR (arg)->size + BITS_PER_CHAR - 1) / BITS_PER_CHAR;
330 330
331 val = Fmake_bool_vector (Flength (arg), Qnil); 331 val = Fmake_bool_vector (Flength (arg), Qnil);
332 bcopy (XBOOL_VECTOR (arg)->data, XBOOL_VECTOR (val)->data, 332 bcopy (XBOOL_VECTOR (arg)->data, XBOOL_VECTOR (val)->data,
@@ -439,7 +439,7 @@ concat (nargs, args, target_type, last_special)
439 else if (BOOL_VECTOR_P (this)) 439 else if (BOOL_VECTOR_P (this))
440 { 440 {
441 int size_in_chars 441 int size_in_chars
442 = ((XBOOL_VECTOR (this)->size + BITS_PER_CHAR) 442 = ((XBOOL_VECTOR (this)->size + BITS_PER_CHAR - 1)
443 / BITS_PER_CHAR); 443 / BITS_PER_CHAR);
444 int byte; 444 int byte;
445 byte = XBOOL_VECTOR (val)->data[thisindex / BITS_PER_CHAR]; 445 byte = XBOOL_VECTOR (val)->data[thisindex / BITS_PER_CHAR];
@@ -1099,7 +1099,7 @@ internal_equal (o1, o2, depth)
1099 if (BOOL_VECTOR_P (o1)) 1099 if (BOOL_VECTOR_P (o1))
1100 { 1100 {
1101 int size_in_chars 1101 int size_in_chars
1102 = (XBOOL_VECTOR (o1)->size + BITS_PER_CHAR) / BITS_PER_CHAR; 1102 = (XBOOL_VECTOR (o1)->size + BITS_PER_CHAR - 1) / BITS_PER_CHAR;
1103 1103
1104 if (XBOOL_VECTOR (o1)->size != XBOOL_VECTOR (o2)->size) 1104 if (XBOOL_VECTOR (o1)->size != XBOOL_VECTOR (o2)->size)
1105 return 0; 1105 return 0;
@@ -1183,7 +1183,7 @@ ARRAY is a vector, string, char-table, or bool-vector.")
1183 { 1183 {
1184 register unsigned char *p = XBOOL_VECTOR (array)->data; 1184 register unsigned char *p = XBOOL_VECTOR (array)->data;
1185 int size_in_chars 1185 int size_in_chars
1186 = (XBOOL_VECTOR (array)->size + BITS_PER_CHAR) / BITS_PER_CHAR; 1186 = (XBOOL_VECTOR (array)->size + BITS_PER_CHAR - 1) / BITS_PER_CHAR;
1187 1187
1188 charval = (! NILP (item) ? -1 : 0); 1188 charval = (! NILP (item) ? -1 : 0);
1189 for (index = 0; index < size_in_chars; index++) 1189 for (index = 0; index < size_in_chars; index++)
@@ -1333,7 +1333,16 @@ or a character code.")
1333 else if (VECTORP (range)) 1333 else if (VECTORP (range))
1334 { 1334 {
1335 for (i = 0; i < XVECTOR (range)->size - 1; i++) 1335 for (i = 0; i < XVECTOR (range)->size - 1; i++)
1336 char_table = Faref (char_table, XVECTOR (range)->contents[i]); 1336 {
1337 Lisp_Object tmp = Faref (char_table, XVECTOR (range)->contents[i]);
1338 if (NILP (tmp))
1339 {
1340 /* Make this char-table deeper. */
1341 XVECTOR (char_table)->contents[XVECTOR (range)->contents[i]]
1342 = tmp = Fmake_char_table (Qnil, Qnil);
1343 }
1344 char_table = tmp;
1345 }
1337 1346
1338 if (EQ (XVECTOR (range)->contents[i], Qnil)) 1347 if (EQ (XVECTOR (range)->contents[i], Qnil))
1339 XCHAR_TABLE (char_table)->defalt = value; 1348 XCHAR_TABLE (char_table)->defalt = value;