aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert2013-10-14 00:12:49 -0700
committerPaul Eggert2013-10-14 00:12:49 -0700
commit1c0a74936b61e1f7e662089126a0765e25bf2c29 (patch)
tree8d57ee533b81b8aeb0bade9f327e385d91418c98 /src
parent1eda1d8d34c864df5b89464e51f0cbb8e46c5afd (diff)
downloademacs-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/ChangeLog9
-rw-r--r--src/category.h2
-rw-r--r--src/data.c24
-rw-r--r--src/fns.c24
-rw-r--r--src/image.c4
-rw-r--r--src/lisp.h8
-rw-r--r--src/print.c9
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 @@
12013-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
12013-10-12 Eli Zaretskii <eliz@gnu.org> 102013-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. */)
2969static bits_word 2969static bits_word
2970bool_vector_spare_mask (ptrdiff_t nr_bits) 2970bool_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;
diff --git a/src/fns.c b/src/fns.c
index 1ee0a758fc2..cb439024c08 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -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)
4188static EMACS_UINT 4187static EMACS_UINT
4189sxhash_bool_vector (Lisp_Object vec) 4188sxhash_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
1187INLINE EMACS_INT
1188bool_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