diff options
| author | Karl Heuer | 1997-02-22 19:31:56 +0000 |
|---|---|---|
| committer | Karl Heuer | 1997-02-22 19:31:56 +0000 |
| commit | e22e428338c071aca0bc154b7fc0bc47e2999421 (patch) | |
| tree | 5ed676287f9ca7beb6a953cf2d11fcc05cb5054b /src/fns.c | |
| parent | 6fdaa9a05da1a0dbcb26d70a10d7e8c109347a8e (diff) | |
| download | emacs-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/fns.c')
| -rw-r--r-- | src/fns.c | 19 |
1 files changed, 14 insertions, 5 deletions
| @@ -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; |