From 8110061e647134ab9071ecb5ce59b69b4ed6ed35 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Tue, 14 Apr 2020 22:40:43 +0200 Subject: 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. --- libguile/deprecated.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'libguile/deprecated.c') 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" -- cgit v1.2.1