summaryrefslogtreecommitdiff
path: root/libguile/deprecated.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2020-04-14 22:40:43 +0200
committerAndy Wingo <wingo@pobox.com>2020-04-14 22:40:43 +0200
commit8110061e647134ab9071ecb5ce59b69b4ed6ed35 (patch)
tree126a6f1288ead0c1b1c750ab077a83088b92e454 /libguile/deprecated.c
parentd804177be4525feb517feb63ca09502d187fc016 (diff)
downloadguile-8110061e647134ab9071ecb5ce59b69b4ed6ed35.tar.gz
bitvector-set-bit! / bitvector-clear-bit! replace bitvector-set!
* NEWS: Add entry. * doc/ref/api-data.texi (Bit Vectors): Update. * libguile/array-handle.h (bitvector_set_x, scm_array_get_handle): Adapt to bitvector changes. * libguile/bitvectors.h: * libguile/bitvectors.c (scm_c_bitvector_set_bit_x) (scm_c_bitvector_clear_bit_x): New functions. * libguile/deprecated.h: * libguile/deprecated.c (scm_bitvector_set_x): Deprecate. * module/ice-9/sandbox.scm (mutable-bitvector-bindings): Replace bitvector-set! with bitvector-set-bit! / bitvector-clear-bit!. * module/system/vm/disassembler.scm (static-opcode-set): Use bitvector-set-bit!. * module/system/vm/frame.scm (compute-defs-by-slot, available-bindings): Use bitvector-set-bit!. * test-suite/tests/bitvectors.test: Update.
Diffstat (limited to 'libguile/deprecated.c')
-rw-r--r--libguile/deprecated.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/libguile/deprecated.c b/libguile/deprecated.c
index dde780be9..24a50ee3b 100644
--- a/libguile/deprecated.c
+++ b/libguile/deprecated.c
@@ -123,6 +123,53 @@ SCM_DEFINE (scm_bitvector_ref, "bitvector-ref", 2, 0, 0,
}
#undef FUNC_NAME
+void
+scm_c_bitvector_set_x (SCM vec, size_t idx, SCM val)
+{
+ scm_c_issue_deprecation_warning
+ ("bitvector-set! is deprecated. Use bitvector-set-bit! or "
+ "bitvector-clear-bit! instead.");
+
+ if (scm_is_bitvector (vec))
+ {
+ if (scm_is_true (val))
+ scm_c_bitvector_set_bit_x (vec, idx);
+ else
+ scm_c_bitvector_clear_bit_x (vec, idx);
+ }
+ else
+ {
+ scm_t_array_handle handle;
+ uint32_t *bits, mask;
+ size_t len, off;
+ ssize_t inc;
+
+ bits = scm_bitvector_writable_elements (vec, &handle, &off, &len, &inc);
+ if (idx >= len)
+ scm_out_of_range (NULL, scm_from_size_t (idx));
+ idx = idx*inc + off;
+
+ mask = 1L << (idx%32);
+ if (scm_is_true (val))
+ bits[idx/32] |= mask;
+ else
+ bits[idx/32] &= ~mask;
+
+ scm_array_handle_release (&handle);
+ }
+}
+
+SCM_DEFINE (scm_bitvector_set_x, "bitvector-set!", 3, 0, 0,
+ (SCM vec, SCM idx, SCM val),
+ "Set the element at index @var{idx} of the bitvector\n"
+ "@var{vec} when @var{val} is true, else clear it.")
+#define FUNC_NAME s_scm_bitvector_set_x
+{
+ scm_c_bitvector_set_x (vec, scm_to_size_t (idx), val);
+ return SCM_UNSPECIFIED;
+}
+#undef FUNC_NAME
+
SCM_DEFINE (scm_bit_count, "bit-count", 2, 0, 0,
(SCM b, SCM bitvector),
"Return the number of occurrences of the boolean @var{b} in\n"