From 607183679e6c1206026672867f179374f3a992a6 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Thu, 23 Apr 2020 21:51:54 +0200 Subject: [PATCH] Deprecate scm_bitvector, scm_make_bitvector, scm_bitvector_p * doc/ref/api-data.texi (Bit Vectors): Update. * libguile/bitvectors.h: * libguile/bitvectors.c: * libguile/deprecated.c: * libguile/deprecated.h: Deprecate scm_bitvector, scm_make_bitvector, and scm_bitvector_p. * libguile/read.c (scm_read_guile_bit_vector): Use scm_list_to_bitvector instead of scm_bitvector. --- doc/ref/api-data.texi | 9 +-------- libguile/bitvectors.c | 30 +++++++++++++++--------------- libguile/bitvectors.h | 4 +--- libguile/deprecated.c | 27 +++++++++++++++++++++++++++ libguile/deprecated.h | 3 +++ libguile/read.c | 4 ++-- 6 files changed, 49 insertions(+), 28 deletions(-) diff --git a/doc/ref/api-data.texi b/doc/ref/api-data.texi index d28909a53..41d4f73c9 100644 --- a/doc/ref/api-data.texi +++ b/doc/ref/api-data.texi @@ -6538,24 +6538,16 @@ Bit vectors are the special case of one dimensional bit arrays, and can thus be used with the array procedures, @xref{Arrays}. @deffn {Scheme Procedure} bitvector? obj -@deffnx {C Function} scm_bitvector_p (obj) Return @code{#t} when @var{obj} is a bitvector, else return @code{#f}. @end deffn @deffn {Scheme Procedure} make-bitvector len [fill] -@deffnx {C Function} scm_make_bitvector (len, fill) Create a new bitvector of length @var{len} and optionally initialize all elements to @var{fill}. @end deffn -@deftypefn {C Function} SCM scm_c_make_bitvector (size_t len, SCM fill) -Like @code{scm_make_bitvector}, but the length is given as a -@code{size_t}. -@end deftypefn - @deffn {Scheme Procedure} bitvector bit @dots{} -@deffnx {C Function} scm_bitvector (bits) Create a new bitvector with the arguments as elements. @end deffn @@ -6655,6 +6647,7 @@ bv @end deffn @deftypefn {C Function} int scm_is_bitvector (SCM obj) +@deftypefnx {C Function} SCM scm_c_make_bitvector (size_t len, SCM fill) @deftypefnx {C Function} int scm_bitvector_bit_is_set (SCM vec, size_t idx) @deftypefnx {C Function} int scm_bitvector_bit_is_clear (SCM vec, size_t idx) @deftypefnx {C Function} void scm_c_bitvector_set_bit_x (SCM vec, size_t idx) diff --git a/libguile/bitvectors.c b/libguile/bitvectors.c index 9c7519b32..3a279e401 100644 --- a/libguile/bitvectors.c +++ b/libguile/bitvectors.c @@ -128,11 +128,11 @@ scm_is_bitvector (SCM vec) return IS_BITVECTOR (vec); } -SCM_DEFINE (scm_bitvector_p, "bitvector?", 1, 0, 0, - (SCM obj), - "Return @code{#t} when @var{obj} is a bitvector, else\n" - "return @code{#f}.") -#define FUNC_NAME s_scm_bitvector_p +SCM_DEFINE_STATIC (bitvector_p, "bitvector?", 1, 0, 0, + (SCM obj), + "Return @code{#t} when @var{obj} is a bitvector, else\n" + "return @code{#f}.") +#define FUNC_NAME s_bitvector_p { return scm_from_bool (scm_is_bitvector (obj)); } @@ -157,20 +157,20 @@ scm_c_make_bitvector (size_t len, SCM fill) return res; } -SCM_DEFINE (scm_make_bitvector, "make-bitvector", 1, 1, 0, - (SCM len, SCM fill), - "Create a new bitvector of length @var{len} and\n" - "optionally initialize all elements to @var{fill}.") -#define FUNC_NAME s_scm_make_bitvector +SCM_DEFINE_STATIC (make_bitvector, "make-bitvector", 1, 1, 0, + (SCM len, SCM fill), + "Create a new bitvector of length @var{len} and\n" + "optionally initialize all elements to @var{fill}.") +#define FUNC_NAME s_make_bitvector { return scm_c_make_bitvector (scm_to_size_t (len), fill); } #undef FUNC_NAME -SCM_DEFINE (scm_bitvector, "bitvector", 0, 0, 1, - (SCM bits), - "Create a new bitvector with the arguments as elements.") -#define FUNC_NAME s_scm_bitvector +SCM_DEFINE_STATIC (bitvector, "bitvector", 0, 0, 1, + (SCM bits), + "Create a new bitvector with the arguments as elements.") +#define FUNC_NAME s_bitvector { return scm_list_to_bitvector (bits); } @@ -758,7 +758,7 @@ SCM_DEFINE_STATIC (scm_bitvector_flip_all_bits_x, } #undef FUNC_NAME -SCM_VECTOR_IMPLEMENTATION (SCM_ARRAY_ELEMENT_TYPE_BIT, scm_make_bitvector) +SCM_VECTOR_IMPLEMENTATION (SCM_ARRAY_ELEMENT_TYPE_BIT, make_bitvector) void scm_init_bitvectors () diff --git a/libguile/bitvectors.h b/libguile/bitvectors.h index 61751d140..fe3f487a7 100644 --- a/libguile/bitvectors.h +++ b/libguile/bitvectors.h @@ -32,9 +32,6 @@ /** Bit vectors */ -SCM_API SCM scm_bitvector_p (SCM vec); -SCM_API SCM scm_bitvector (SCM bits); -SCM_API SCM scm_make_bitvector (SCM len, SCM fill); SCM_API SCM scm_list_to_bitvector (SCM list); SCM_API SCM scm_bitvector_to_list (SCM vec); @@ -54,6 +51,7 @@ SCM_API void scm_c_bitvector_set_all_bits_x (SCM vec); SCM_API void scm_c_bitvector_clear_all_bits_x (SCM vec); SCM_API void scm_c_bitvector_flip_all_bits_x (SCM vec); SCM_API size_t scm_c_bitvector_count_bits (SCM v, SCM bits); + SCM_API const uint32_t *scm_array_handle_bit_elements (scm_t_array_handle *h); SCM_API uint32_t *scm_array_handle_bit_writable_elements (scm_t_array_handle *h); SCM_API size_t scm_array_handle_bit_elements_offset (scm_t_array_handle *h); diff --git a/libguile/deprecated.c b/libguile/deprecated.c index 517346807..1cdc9dfac 100644 --- a/libguile/deprecated.c +++ b/libguile/deprecated.c @@ -88,6 +88,33 @@ scm_find_executable (const char *name) +SCM +scm_bitvector_p (SCM vec) +{ + scm_c_issue_deprecation_warning + ("scm_bitvector_p is deprecated. Use scm_is_bitvector instead."); + + return scm_from_bool (scm_is_bitvector (vec)); +} + +SCM +scm_bitvector (SCM list) +{ + scm_c_issue_deprecation_warning + ("scm_bitvector is deprecated. Use scm_list_to_bitvector instead."); + + return scm_list_to_bitvector (list); +} + +SCM +scm_make_bitvector (SCM len, SCM fill) +{ + scm_c_issue_deprecation_warning + ("scm_make_bitvector is deprecated. Use scm_c_make_bitvector instead."); + + return scm_c_make_bitvector (scm_to_size_t (len), fill); +} + SCM scm_bitvector_length (SCM vec) { diff --git a/libguile/deprecated.h b/libguile/deprecated.h index a41199e4a..81ec7b073 100644 --- a/libguile/deprecated.h +++ b/libguile/deprecated.h @@ -115,6 +115,9 @@ typedef struct scm_thread scm_i_thread SCM_DEPRECATED_TYPE; SCM_DEPRECATED char* scm_find_executable (const char *name); +SCM_DEPRECATED SCM scm_bitvector_p (SCM vec); +SCM_DEPRECATED SCM scm_bitvector (SCM bits); +SCM_DEPRECATED SCM scm_make_bitvector (SCM len, SCM fill); SCM_DEPRECATED SCM scm_bitvector_length (SCM vec); SCM_DEPRECATED SCM scm_c_bitvector_ref (SCM vec, size_t idx); SCM_DEPRECATED SCM scm_bitvector_ref (SCM vec, SCM idx); diff --git a/libguile/read.c b/libguile/read.c index f146f0ef0..040a17834 100644 --- a/libguile/read.c +++ b/libguile/read.c @@ -1,4 +1,4 @@ -/* Copyright 1995-1997,1999-2001,2003-2004,2006-2012,2014-2019 +/* Copyright 1995-1997,1999-2001,2003-2004,2006-2012,2014-2020 Free Software Foundation, Inc. This file is part of Guile. @@ -1404,7 +1404,7 @@ scm_read_guile_bit_vector (scm_t_wchar chr, SCM port, scm_t_read_opts *opts, scm_ungetc (chr, port); return maybe_annotate_source - (scm_bitvector (scm_reverse_x (s_bits, SCM_EOL)), + (scm_list_to_bitvector (scm_reverse_x (s_bits, SCM_EOL)), port, opts, line, column); }