diff options
| author | Paul Eggert | 2013-10-14 00:12:49 -0700 |
|---|---|---|
| committer | Paul Eggert | 2013-10-14 00:12:49 -0700 |
| commit | 1c0a74936b61e1f7e662089126a0765e25bf2c29 (patch) | |
| tree | 8d57ee533b81b8aeb0bade9f327e385d91418c98 /src | |
| parent | 1eda1d8d34c864df5b89464e51f0cbb8e46c5afd (diff) | |
| download | emacs-1c0a74936b61e1f7e662089126a0765e25bf2c29.tar.gz emacs-1c0a74936b61e1f7e662089126a0765e25bf2c29.zip | |
* lisp.h (bool_vector_size): New function.
All uses of XBOOL_VECTOR (x)->size changed to bool_vector_size (x).
* data.c (bool_vector_spare_mask, bool_vector_binop_driver)
(Fbool_vector_not, Fbool_vector_count_matches_at):
Remove uses of 'eassume' that should no longer be needed,
because they are subsumed by the 'eassume' in bool_vector_size.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 9 | ||||
| -rw-r--r-- | src/category.h | 2 | ||||
| -rw-r--r-- | src/data.c | 24 | ||||
| -rw-r--r-- | src/fns.c | 24 | ||||
| -rw-r--r-- | src/image.c | 4 | ||||
| -rw-r--r-- | src/lisp.h | 8 | ||||
| -rw-r--r-- | src/print.c | 9 |
7 files changed, 44 insertions, 36 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index b853f874e24..488313e4a1e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,12 @@ | |||
| 1 | 2013-10-14 Paul Eggert <eggert@cs.ucla.edu> | ||
| 2 | |||
| 3 | * lisp.h (bool_vector_size): New function. | ||
| 4 | All uses of XBOOL_VECTOR (x)->size changed to bool_vector_size (x). | ||
| 5 | * data.c (bool_vector_spare_mask, bool_vector_binop_driver) | ||
| 6 | (Fbool_vector_not, Fbool_vector_count_matches_at): | ||
| 7 | Remove uses of 'eassume' that should no longer be needed, | ||
| 8 | because they are subsumed by the 'eassume' in bool_vector_size. | ||
| 9 | |||
| 1 | 2013-10-12 Eli Zaretskii <eliz@gnu.org> | 10 | 2013-10-12 Eli Zaretskii <eliz@gnu.org> |
| 2 | 11 | ||
| 3 | * image.c (GIFLIB_MAJOR, GIFLIB_MINOR, GIFLIB_RELEASE): Move back | 12 | * image.c (GIFLIB_MAJOR, GIFLIB_MINOR, GIFLIB_RELEASE): Move back |
diff --git a/src/category.h b/src/category.h index 828dcd1f325..a2eaf010132 100644 --- a/src/category.h +++ b/src/category.h | |||
| @@ -63,7 +63,7 @@ INLINE_HEADER_BEGIN | |||
| 63 | #define XCATEGORY_SET XBOOL_VECTOR | 63 | #define XCATEGORY_SET XBOOL_VECTOR |
| 64 | 64 | ||
| 65 | #define CATEGORY_SET_P(x) \ | 65 | #define CATEGORY_SET_P(x) \ |
| 66 | (BOOL_VECTOR_P (x) && XBOOL_VECTOR (x)->size == 128) | 66 | (BOOL_VECTOR_P (x) && bool_vector_size (x) == 128) |
| 67 | 67 | ||
| 68 | /* Return a new empty category set. */ | 68 | /* Return a new empty category set. */ |
| 69 | #define MAKE_CATEGORY_SET (Fmake_bool_vector (make_number (128), Qnil)) | 69 | #define MAKE_CATEGORY_SET (Fmake_bool_vector (make_number (128), Qnil)) |
diff --git a/src/data.c b/src/data.c index b4257243fb3..dea70ca42d6 100644 --- a/src/data.c +++ b/src/data.c | |||
| @@ -2130,7 +2130,7 @@ or a byte-code object. IDX starts at 0. */) | |||
| 2130 | { | 2130 | { |
| 2131 | int val; | 2131 | int val; |
| 2132 | 2132 | ||
| 2133 | if (idxval < 0 || idxval >= XBOOL_VECTOR (array)->size) | 2133 | if (idxval < 0 || idxval >= bool_vector_size (array)) |
| 2134 | args_out_of_range (array, idx); | 2134 | args_out_of_range (array, idx); |
| 2135 | 2135 | ||
| 2136 | val = (unsigned char) XBOOL_VECTOR (array)->data[idxval / BOOL_VECTOR_BITS_PER_CHAR]; | 2136 | val = (unsigned char) XBOOL_VECTOR (array)->data[idxval / BOOL_VECTOR_BITS_PER_CHAR]; |
| @@ -2180,7 +2180,7 @@ bool-vector. IDX starts at 0. */) | |||
| 2180 | { | 2180 | { |
| 2181 | int val; | 2181 | int val; |
| 2182 | 2182 | ||
| 2183 | if (idxval < 0 || idxval >= XBOOL_VECTOR (array)->size) | 2183 | if (idxval < 0 || idxval >= bool_vector_size (array)) |
| 2184 | args_out_of_range (array, idx); | 2184 | args_out_of_range (array, idx); |
| 2185 | 2185 | ||
| 2186 | val = (unsigned char) XBOOL_VECTOR (array)->data[idxval / BOOL_VECTOR_BITS_PER_CHAR]; | 2186 | val = (unsigned char) XBOOL_VECTOR (array)->data[idxval / BOOL_VECTOR_BITS_PER_CHAR]; |
| @@ -2969,7 +2969,6 @@ lowercase l) for small endian machines. */) | |||
| 2969 | static bits_word | 2969 | static bits_word |
| 2970 | bool_vector_spare_mask (ptrdiff_t nr_bits) | 2970 | bool_vector_spare_mask (ptrdiff_t nr_bits) |
| 2971 | { | 2971 | { |
| 2972 | eassume (nr_bits > 0); | ||
| 2973 | return (((bits_word) 1) << (nr_bits % BITS_PER_BITS_WORD)) - 1; | 2972 | return (((bits_word) 1) << (nr_bits % BITS_PER_BITS_WORD)) - 1; |
| 2974 | } | 2973 | } |
| 2975 | 2974 | ||
| @@ -3005,8 +3004,7 @@ bool_vector_binop_driver (Lisp_Object op1, | |||
| 3005 | CHECK_BOOL_VECTOR (op1); | 3004 | CHECK_BOOL_VECTOR (op1); |
| 3006 | CHECK_BOOL_VECTOR (op2); | 3005 | CHECK_BOOL_VECTOR (op2); |
| 3007 | 3006 | ||
| 3008 | nr_bits = min (XBOOL_VECTOR (op1)->size, | 3007 | nr_bits = min (bool_vector_size (op1), bool_vector_size (op2)); |
| 3009 | XBOOL_VECTOR (op2)->size); | ||
| 3010 | 3008 | ||
| 3011 | if (NILP (dest)) | 3009 | if (NILP (dest)) |
| 3012 | { | 3010 | { |
| @@ -3016,10 +3014,9 @@ bool_vector_binop_driver (Lisp_Object op1, | |||
| 3016 | else | 3014 | else |
| 3017 | { | 3015 | { |
| 3018 | CHECK_BOOL_VECTOR (dest); | 3016 | CHECK_BOOL_VECTOR (dest); |
| 3019 | nr_bits = min (nr_bits, XBOOL_VECTOR (dest)->size); | 3017 | nr_bits = min (nr_bits, bool_vector_size (dest)); |
| 3020 | } | 3018 | } |
| 3021 | 3019 | ||
| 3022 | eassume (nr_bits >= 0); | ||
| 3023 | nr_words = ROUNDUP (nr_bits, BITS_PER_BITS_WORD) / BITS_PER_BITS_WORD; | 3020 | nr_words = ROUNDUP (nr_bits, BITS_PER_BITS_WORD) / BITS_PER_BITS_WORD; |
| 3024 | 3021 | ||
| 3025 | adata = (bits_word *) XBOOL_VECTOR (dest)->data; | 3022 | adata = (bits_word *) XBOOL_VECTOR (dest)->data; |
| @@ -3172,21 +3169,19 @@ Return the destination vector. */) | |||
| 3172 | bits_word mword; | 3169 | bits_word mword; |
| 3173 | 3170 | ||
| 3174 | CHECK_BOOL_VECTOR (a); | 3171 | CHECK_BOOL_VECTOR (a); |
| 3175 | nr_bits = XBOOL_VECTOR (a)->size; | 3172 | nr_bits = bool_vector_size (a); |
| 3176 | 3173 | ||
| 3177 | if (NILP (b)) | 3174 | if (NILP (b)) |
| 3178 | b = Fmake_bool_vector (make_number (nr_bits), Qnil); | 3175 | b = Fmake_bool_vector (make_number (nr_bits), Qnil); |
| 3179 | else | 3176 | else |
| 3180 | { | 3177 | { |
| 3181 | CHECK_BOOL_VECTOR (b); | 3178 | CHECK_BOOL_VECTOR (b); |
| 3182 | nr_bits = min (nr_bits, XBOOL_VECTOR (b)->size); | 3179 | nr_bits = min (nr_bits, bool_vector_size (b)); |
| 3183 | } | 3180 | } |
| 3184 | 3181 | ||
| 3185 | bdata = (bits_word *) XBOOL_VECTOR (b)->data; | 3182 | bdata = (bits_word *) XBOOL_VECTOR (b)->data; |
| 3186 | adata = (bits_word *) XBOOL_VECTOR (a)->data; | 3183 | adata = (bits_word *) XBOOL_VECTOR (a)->data; |
| 3187 | 3184 | ||
| 3188 | eassume (nr_bits >= 0); | ||
| 3189 | |||
| 3190 | for (i = 0; i < nr_bits / BITS_PER_BITS_WORD; i++) | 3185 | for (i = 0; i < nr_bits / BITS_PER_BITS_WORD; i++) |
| 3191 | bdata[i] = ~adata[i]; | 3186 | bdata[i] = ~adata[i]; |
| 3192 | 3187 | ||
| @@ -3215,13 +3210,11 @@ A must be a bool vector. B is a generalized bool. */) | |||
| 3215 | 3210 | ||
| 3216 | CHECK_BOOL_VECTOR (a); | 3211 | CHECK_BOOL_VECTOR (a); |
| 3217 | 3212 | ||
| 3218 | nr_bits = XBOOL_VECTOR (a)->size; | 3213 | nr_bits = bool_vector_size (a); |
| 3219 | count = 0; | 3214 | count = 0; |
| 3220 | match = NILP (b) ? -1 : 0; | 3215 | match = NILP (b) ? -1 : 0; |
| 3221 | adata = (bits_word *) XBOOL_VECTOR (a)->data; | 3216 | adata = (bits_word *) XBOOL_VECTOR (a)->data; |
| 3222 | 3217 | ||
| 3223 | eassume (nr_bits >= 0); | ||
| 3224 | |||
| 3225 | for (i = 0; i < nr_bits / BITS_PER_BITS_WORD; ++i) | 3218 | for (i = 0; i < nr_bits / BITS_PER_BITS_WORD; ++i) |
| 3226 | count += popcount_bits_word (adata[i] ^ match); | 3219 | count += popcount_bits_word (adata[i] ^ match); |
| 3227 | 3220 | ||
| @@ -3256,13 +3249,12 @@ index into the vector. */) | |||
| 3256 | CHECK_BOOL_VECTOR (a); | 3249 | CHECK_BOOL_VECTOR (a); |
| 3257 | CHECK_NATNUM (i); | 3250 | CHECK_NATNUM (i); |
| 3258 | 3251 | ||
| 3259 | nr_bits = XBOOL_VECTOR (a)->size; | 3252 | nr_bits = bool_vector_size (a); |
| 3260 | if (XFASTINT (i) > nr_bits) /* Allow one past the end for convenience */ | 3253 | if (XFASTINT (i) > nr_bits) /* Allow one past the end for convenience */ |
| 3261 | args_out_of_range (a, i); | 3254 | args_out_of_range (a, i); |
| 3262 | 3255 | ||
| 3263 | adata = (bits_word *) XBOOL_VECTOR (a)->data; | 3256 | adata = (bits_word *) XBOOL_VECTOR (a)->data; |
| 3264 | 3257 | ||
| 3265 | eassume (nr_bits >= 0); | ||
| 3266 | nr_words = ROUNDUP (nr_bits, BITS_PER_BITS_WORD) / BITS_PER_BITS_WORD; | 3258 | nr_words = ROUNDUP (nr_bits, BITS_PER_BITS_WORD) / BITS_PER_BITS_WORD; |
| 3267 | 3259 | ||
| 3268 | pos = XFASTINT (i) / BITS_PER_BITS_WORD; | 3260 | pos = XFASTINT (i) / BITS_PER_BITS_WORD; |
| @@ -114,7 +114,7 @@ To get the number of bytes, use `string-bytes'. */) | |||
| 114 | else if (CHAR_TABLE_P (sequence)) | 114 | else if (CHAR_TABLE_P (sequence)) |
| 115 | XSETFASTINT (val, MAX_CHAR); | 115 | XSETFASTINT (val, MAX_CHAR); |
| 116 | else if (BOOL_VECTOR_P (sequence)) | 116 | else if (BOOL_VECTOR_P (sequence)) |
| 117 | XSETFASTINT (val, XBOOL_VECTOR (sequence)->size); | 117 | XSETFASTINT (val, bool_vector_size (sequence)); |
| 118 | else if (COMPILEDP (sequence)) | 118 | else if (COMPILEDP (sequence)) |
| 119 | XSETFASTINT (val, ASIZE (sequence) & PSEUDOVECTOR_SIZE_MASK); | 119 | XSETFASTINT (val, ASIZE (sequence) & PSEUDOVECTOR_SIZE_MASK); |
| 120 | else if (CONSP (sequence)) | 120 | else if (CONSP (sequence)) |
| @@ -437,7 +437,7 @@ with the original. */) | |||
| 437 | { | 437 | { |
| 438 | Lisp_Object val; | 438 | Lisp_Object val; |
| 439 | ptrdiff_t size_in_chars | 439 | ptrdiff_t size_in_chars |
| 440 | = ((XBOOL_VECTOR (arg)->size + BOOL_VECTOR_BITS_PER_CHAR - 1) | 440 | = ((bool_vector_size (arg) + BOOL_VECTOR_BITS_PER_CHAR - 1) |
| 441 | / BOOL_VECTOR_BITS_PER_CHAR); | 441 | / BOOL_VECTOR_BITS_PER_CHAR); |
| 442 | 442 | ||
| 443 | val = Fmake_bool_vector (Flength (arg), Qnil); | 443 | val = Fmake_bool_vector (Flength (arg), Qnil); |
| @@ -540,7 +540,7 @@ concat (ptrdiff_t nargs, Lisp_Object *args, | |||
| 540 | if (! ASCII_CHAR_P (c) && ! CHAR_BYTE8_P (c)) | 540 | if (! ASCII_CHAR_P (c) && ! CHAR_BYTE8_P (c)) |
| 541 | some_multibyte = 1; | 541 | some_multibyte = 1; |
| 542 | } | 542 | } |
| 543 | else if (BOOL_VECTOR_P (this) && XBOOL_VECTOR (this)->size > 0) | 543 | else if (BOOL_VECTOR_P (this) && bool_vector_size (this) > 0) |
| 544 | wrong_type_argument (Qintegerp, Faref (this, make_number (0))); | 544 | wrong_type_argument (Qintegerp, Faref (this, make_number (0))); |
| 545 | else if (CONSP (this)) | 545 | else if (CONSP (this)) |
| 546 | for (; CONSP (this); this = XCDR (this)) | 546 | for (; CONSP (this); this = XCDR (this)) |
| @@ -2070,11 +2070,11 @@ internal_equal (Lisp_Object o1, Lisp_Object o2, int depth, bool props) | |||
| 2070 | /* Boolvectors are compared much like strings. */ | 2070 | /* Boolvectors are compared much like strings. */ |
| 2071 | if (BOOL_VECTOR_P (o1)) | 2071 | if (BOOL_VECTOR_P (o1)) |
| 2072 | { | 2072 | { |
| 2073 | if (XBOOL_VECTOR (o1)->size != XBOOL_VECTOR (o2)->size) | 2073 | EMACS_INT size = bool_vector_size (o1); |
| 2074 | if (size != bool_vector_size (o2)) | ||
| 2074 | return 0; | 2075 | return 0; |
| 2075 | if (memcmp (XBOOL_VECTOR (o1)->data, XBOOL_VECTOR (o2)->data, | 2076 | if (memcmp (XBOOL_VECTOR (o1)->data, XBOOL_VECTOR (o2)->data, |
| 2076 | ((XBOOL_VECTOR (o1)->size | 2077 | ((size + BOOL_VECTOR_BITS_PER_CHAR - 1) |
| 2077 | + BOOL_VECTOR_BITS_PER_CHAR - 1) | ||
| 2078 | / BOOL_VECTOR_BITS_PER_CHAR))) | 2078 | / BOOL_VECTOR_BITS_PER_CHAR))) |
| 2079 | return 0; | 2079 | return 0; |
| 2080 | return 1; | 2080 | return 1; |
| @@ -2166,10 +2166,9 @@ ARRAY is a vector, string, char-table, or bool-vector. */) | |||
| 2166 | } | 2166 | } |
| 2167 | else if (BOOL_VECTOR_P (array)) | 2167 | else if (BOOL_VECTOR_P (array)) |
| 2168 | { | 2168 | { |
| 2169 | register unsigned char *p = XBOOL_VECTOR (array)->data; | 2169 | unsigned char *p = XBOOL_VECTOR (array)->data; |
| 2170 | size = | 2170 | size = ((bool_vector_size (array) + BOOL_VECTOR_BITS_PER_CHAR - 1) |
| 2171 | ((XBOOL_VECTOR (array)->size + BOOL_VECTOR_BITS_PER_CHAR - 1) | 2171 | / BOOL_VECTOR_BITS_PER_CHAR); |
| 2172 | / BOOL_VECTOR_BITS_PER_CHAR); | ||
| 2173 | 2172 | ||
| 2174 | if (size) | 2173 | if (size) |
| 2175 | { | 2174 | { |
| @@ -4188,11 +4187,12 @@ sxhash_vector (Lisp_Object vec, int depth) | |||
| 4188 | static EMACS_UINT | 4187 | static EMACS_UINT |
| 4189 | sxhash_bool_vector (Lisp_Object vec) | 4188 | sxhash_bool_vector (Lisp_Object vec) |
| 4190 | { | 4189 | { |
| 4191 | EMACS_UINT hash = XBOOL_VECTOR (vec)->size; | 4190 | EMACS_INT size = bool_vector_size (vec); |
| 4191 | EMACS_UINT hash = size; | ||
| 4192 | int i, n; | 4192 | int i, n; |
| 4193 | 4193 | ||
| 4194 | n = min (SXHASH_MAX_LEN, | 4194 | n = min (SXHASH_MAX_LEN, |
| 4195 | ((XBOOL_VECTOR (vec)->size + BOOL_VECTOR_BITS_PER_CHAR - 1) | 4195 | ((size + BOOL_VECTOR_BITS_PER_CHAR - 1) |
| 4196 | / BOOL_VECTOR_BITS_PER_CHAR)); | 4196 | / BOOL_VECTOR_BITS_PER_CHAR)); |
| 4197 | for (i = 0; i < n; ++i) | 4197 | for (i = 0; i < n; ++i) |
| 4198 | hash = sxhash_combine (hash, XBOOL_VECTOR (vec)->data[i]); | 4198 | hash = sxhash_combine (hash, XBOOL_VECTOR (vec)->data[i]); |
diff --git a/src/image.c b/src/image.c index bb3290a89f6..2b07b83b816 100644 --- a/src/image.c +++ b/src/image.c | |||
| @@ -2456,7 +2456,7 @@ xbm_image_p (Lisp_Object object) | |||
| 2456 | } | 2456 | } |
| 2457 | else if (BOOL_VECTOR_P (elt)) | 2457 | else if (BOOL_VECTOR_P (elt)) |
| 2458 | { | 2458 | { |
| 2459 | if (XBOOL_VECTOR (elt)->size < width) | 2459 | if (bool_vector_size (elt) < width) |
| 2460 | return 0; | 2460 | return 0; |
| 2461 | } | 2461 | } |
| 2462 | else | 2462 | else |
| @@ -2471,7 +2471,7 @@ xbm_image_p (Lisp_Object object) | |||
| 2471 | } | 2471 | } |
| 2472 | else if (BOOL_VECTOR_P (data)) | 2472 | else if (BOOL_VECTOR_P (data)) |
| 2473 | { | 2473 | { |
| 2474 | if (XBOOL_VECTOR (data)->size / height < width) | 2474 | if (bool_vector_size (data) / height < width) |
| 2475 | return 0; | 2475 | return 0; |
| 2476 | } | 2476 | } |
| 2477 | else | 2477 | else |
diff --git a/src/lisp.h b/src/lisp.h index e4a2caa1083..d25904be379 100644 --- a/src/lisp.h +++ b/src/lisp.h | |||
| @@ -1184,6 +1184,14 @@ struct Lisp_Bool_Vector | |||
| 1184 | unsigned char data[FLEXIBLE_ARRAY_MEMBER]; | 1184 | unsigned char data[FLEXIBLE_ARRAY_MEMBER]; |
| 1185 | }; | 1185 | }; |
| 1186 | 1186 | ||
| 1187 | INLINE EMACS_INT | ||
| 1188 | bool_vector_size (Lisp_Object a) | ||
| 1189 | { | ||
| 1190 | EMACS_INT size = XBOOL_VECTOR (a)->size; | ||
| 1191 | eassume (0 <= size); | ||
| 1192 | return size; | ||
| 1193 | } | ||
| 1194 | |||
| 1187 | /* Some handy constants for calculating sizes | 1195 | /* Some handy constants for calculating sizes |
| 1188 | and offsets, mostly of vectorlike objects. */ | 1196 | and offsets, mostly of vectorlike objects. */ |
| 1189 | 1197 | ||
diff --git a/src/print.c b/src/print.c index 4ad34534da3..04552be906f 100644 --- a/src/print.c +++ b/src/print.c | |||
| @@ -1704,15 +1704,14 @@ print_object (Lisp_Object obj, Lisp_Object printcharfun, bool escapeflag) | |||
| 1704 | int len; | 1704 | int len; |
| 1705 | unsigned char c; | 1705 | unsigned char c; |
| 1706 | struct gcpro gcpro1; | 1706 | struct gcpro gcpro1; |
| 1707 | ptrdiff_t size_in_chars | 1707 | EMACS_INT size = bool_vector_size (obj); |
| 1708 | = ((XBOOL_VECTOR (obj)->size + BOOL_VECTOR_BITS_PER_CHAR - 1) | 1708 | ptrdiff_t size_in_chars = ((size + BOOL_VECTOR_BITS_PER_CHAR - 1) |
| 1709 | / BOOL_VECTOR_BITS_PER_CHAR); | 1709 | / BOOL_VECTOR_BITS_PER_CHAR); |
| 1710 | |||
| 1711 | GCPRO1 (obj); | 1710 | GCPRO1 (obj); |
| 1712 | 1711 | ||
| 1713 | PRINTCHAR ('#'); | 1712 | PRINTCHAR ('#'); |
| 1714 | PRINTCHAR ('&'); | 1713 | PRINTCHAR ('&'); |
| 1715 | len = sprintf (buf, "%"pI"d", XBOOL_VECTOR (obj)->size); | 1714 | len = sprintf (buf, "%"pI"d", size); |
| 1716 | strout (buf, len, len, printcharfun); | 1715 | strout (buf, len, len, printcharfun); |
| 1717 | PRINTCHAR ('\"'); | 1716 | PRINTCHAR ('\"'); |
| 1718 | 1717 | ||