summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2009-12-08 22:53:21 +0100
committerAndy Wingo <wingo@pobox.com>2009-12-08 23:13:21 +0100
commit735bcfe579606eddb1700462e56918d48affe36e (patch)
tree03f998c72d39602b6ea12144d58237e051083b49
parent75a029aa2553a24e4804722521f1e5db9690fbe3 (diff)
downloadguile-735bcfe579606eddb1700462e56918d48affe36e.tar.gz
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.
-rw-r--r--libguile/arrays.c3
-rw-r--r--libguile/bitvectors.c3
-rw-r--r--libguile/smob.h2
-rw-r--r--libguile/srfi-4.c3
4 files changed, 8 insertions, 3 deletions
diff --git a/libguile/arrays.c b/libguile/arrays.c
index b4838e7e3..741cc564a 100644
--- a/libguile/arrays.c
+++ b/libguile/arrays.c
@@ -1126,7 +1126,8 @@ array_get_handle (SCM array, scm_t_array_handle *h)
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_get_handle);
diff --git a/libguile/bitvectors.c b/libguile/bitvectors.c
index c3b6f3e4e..3e23adf8e 100644
--- a/libguile/bitvectors.c
+++ b/libguile/bitvectors.c
@@ -878,7 +878,8 @@ bitvector_get_handle (SCM bv, scm_t_array_handle *h)
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_get_handle);
SCM_VECTOR_IMPLEMENTATION (SCM_ARRAY_ELEMENT_TYPE_BIT, scm_make_bitvector);
diff --git a/libguile/smob.h b/libguile/smob.h
index 06b1c48e1..f9b511066 100644
--- a/libguile/smob.h
+++ b/libguile/smob.h
@@ -161,6 +161,8 @@ while (0)
#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_SMOBNUM(x) (SCM_TC2SMOBNUM (SCM_CELL_TYPE (x)))
/* SCM_SMOBNAME can be 0 if name is missing */
diff --git a/libguile/srfi-4.c b/libguile/srfi-4.c
index 3849776cd..45b9de066 100644
--- a/libguile/srfi-4.c
+++ b/libguile/srfi-4.c
@@ -883,7 +883,8 @@ uvec_get_handle (SCM v, scm_t_array_handle *h)
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_get_handle);