1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 11:50:28 +02:00

add SCM_SMOB_TYPE_BITS and SCM_SMOB_TYPE_MASK

* libguile/smob.h (SCM_SMOB_TYPE_BITS, SCM_SMOB_TYPE_MASK): New macros,
  for when you want to identify a SMOB by type and mask.

* libguile/arrays.c:
* libguile/bitvectors.c:
* libguile/srfi-4.c: Use the new macros.
This commit is contained in:
Andy Wingo 2009-12-08 22:53:21 +01:00
parent 75a029aa25
commit 735bcfe579
4 changed files with 8 additions and 3 deletions

View file

@ -1126,7 +1126,8 @@ array_get_handle (SCM array, scm_t_array_handle *h)
h->base = SCM_I_ARRAY_BASE (array); h->base = SCM_I_ARRAY_BASE (array);
} }
SCM_ARRAY_IMPLEMENTATION (scm_i_tc16_array, 0xffff, SCM_ARRAY_IMPLEMENTATION (SCM_SMOB_TYPE_BITS (scm_i_tc16_array),
SCM_SMOB_TYPE_MASK,
array_handle_ref, array_handle_set, array_handle_ref, array_handle_set,
array_get_handle); array_get_handle);

View file

@ -878,7 +878,8 @@ bitvector_get_handle (SCM bv, scm_t_array_handle *h)
h->elements = h->writable_elements = BITVECTOR_BITS (bv); h->elements = h->writable_elements = BITVECTOR_BITS (bv);
} }
SCM_ARRAY_IMPLEMENTATION (scm_tc16_bitvector, 0xffff, SCM_ARRAY_IMPLEMENTATION (SCM_SMOB_TYPE_BITS (scm_tc16_bitvector),
SCM_SMOB_TYPE_MASK,
bitvector_handle_ref, bitvector_handle_set, bitvector_handle_ref, bitvector_handle_set,
bitvector_get_handle); bitvector_get_handle);
SCM_VECTOR_IMPLEMENTATION (SCM_ARRAY_ELEMENT_TYPE_BIT, scm_make_bitvector); SCM_VECTOR_IMPLEMENTATION (SCM_ARRAY_ELEMENT_TYPE_BIT, scm_make_bitvector);

View file

@ -161,6 +161,8 @@ while (0)
#define SCM_SMOB_OBJECT_LOC(x) (SCM_SMOB_OBJECT_1_LOC (x))) #define SCM_SMOB_OBJECT_LOC(x) (SCM_SMOB_OBJECT_1_LOC (x)))
#define SCM_SMOB_TYPE_MASK 0xffff
#define SCM_SMOB_TYPE_BITS(tc) (tc)
#define SCM_TC2SMOBNUM(x) (0x0ff & ((x) >> 8)) #define SCM_TC2SMOBNUM(x) (0x0ff & ((x) >> 8))
#define SCM_SMOBNUM(x) (SCM_TC2SMOBNUM (SCM_CELL_TYPE (x))) #define SCM_SMOBNUM(x) (SCM_TC2SMOBNUM (SCM_CELL_TYPE (x)))
/* SCM_SMOBNAME can be 0 if name is missing */ /* SCM_SMOBNAME can be 0 if name is missing */

View file

@ -883,7 +883,8 @@ uvec_get_handle (SCM v, scm_t_array_handle *h)
h->elements = h->writable_elements = SCM_UVEC_BASE (v); h->elements = h->writable_elements = SCM_UVEC_BASE (v);
} }
SCM_ARRAY_IMPLEMENTATION (scm_tc16_uvec, 0xffff, SCM_ARRAY_IMPLEMENTATION (SCM_SMOB_TYPE_BITS (scm_tc16_uvec),
SCM_SMOB_TYPE_MASK,
uvec_handle_ref, uvec_handle_set, uvec_handle_ref, uvec_handle_set,
uvec_get_handle); uvec_get_handle);