diff options
Diffstat (limited to 'libguile/deprecated.c')
-rw-r--r-- | libguile/deprecated.c | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/libguile/deprecated.c b/libguile/deprecated.c index c3ba0a9eb..73720a5b8 100644 --- a/libguile/deprecated.c +++ b/libguile/deprecated.c @@ -27,6 +27,7 @@ #include "eval.h" #include "gsubr.h" #include "modules.h" +#include "numbers.h" #include "threads.h" #include "variable.h" @@ -60,6 +61,116 @@ scm_make_guardian (void) +static SCM make_weak_vector_var; +static SCM weak_vector_var; +static SCM weak_vector_p_var; +static SCM weak_vector_length_var; +static SCM weak_vector_ref_var; +static SCM weak_vector_set_x_var; + +static void +init_weak_vector_vars (void) +{ + make_weak_vector_var = + scm_c_public_lookup ("ice-9 weak-vector", "make-weak-vector"); + weak_vector_var = + scm_c_public_lookup ("ice-9 weak-vector", "weak-vector"); + weak_vector_p_var = + scm_c_public_lookup ("ice-9 weak-vector", "weak-vector?"); + weak_vector_length_var = + scm_c_public_lookup ("ice-9 weak-vector", "weak-vector-length"); + weak_vector_ref_var = + scm_c_public_lookup ("ice-9 weak-vector", "weak-vector-ref"); + weak_vector_set_x_var = + scm_c_public_lookup ("ice-9 weak-vector", "weak-vector-set!"); +} + +static void +init_weak_vectors (void) +{ + static scm_i_pthread_once_t once = SCM_I_PTHREAD_ONCE_INIT; + scm_c_issue_deprecation_warning + ("The weak vector C interface is deprecated. Invoke the Scheme " + "procedures from (ice-9 weak-vector) instead."); + scm_i_pthread_once (&once, init_weak_vector_vars); +} + +SCM +scm_make_weak_vector (SCM len, SCM fill) +{ + init_weak_vectors (); + return scm_call_2 (scm_variable_ref (make_weak_vector_var), len, + SCM_UNBNDP (fill) ? SCM_BOOL_F : fill); +} + +SCM +scm_weak_vector (SCM l) +{ + init_weak_vectors (); + return scm_call_1 (scm_variable_ref (weak_vector_var), l); +} + +SCM +scm_weak_vector_p (SCM x) +{ + init_weak_vectors (); + return scm_call_1 (scm_variable_ref (weak_vector_p_var), x); +} + +SCM +scm_weak_vector_length (SCM v) +{ + init_weak_vectors (); + return scm_call_1 (scm_variable_ref (weak_vector_length_var), v); +} + +SCM +scm_weak_vector_ref (SCM v, SCM k) +{ + init_weak_vectors (); + return scm_call_2 (scm_variable_ref (weak_vector_ref_var), v, k); +} + +SCM +scm_weak_vector_set_x (SCM v, SCM k, SCM x) +{ + init_weak_vectors (); + scm_call_3 (scm_variable_ref (weak_vector_set_x_var), v, k, x); + return SCM_UNSPECIFIED; +} + +SCM +scm_c_make_weak_vector (size_t len, SCM fill) +{ + return scm_make_weak_vector (scm_from_size_t (len), fill); +} + +int +scm_is_weak_vector (SCM obj) +{ + return scm_is_true (scm_weak_vector_p (obj)); +} + +size_t +scm_c_weak_vector_length (SCM vec) +{ + return scm_to_size_t (scm_weak_vector_length (vec)); +} + +SCM +scm_c_weak_vector_ref (SCM v, size_t k) +{ + return scm_weak_vector_ref (v, scm_from_size_t (k)); +} + +void +scm_c_weak_vector_set_x (SCM v, size_t k, SCM x) +{ + scm_weak_vector_set_x (v, scm_from_size_t (k), x); +} + + + void scm_i_init_deprecated () { |