1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-01 04:10:18 +02:00

* objects.h (SCM_SET_ENTITY_SETTER): new macro. SCM_ENTITY_SETTER

casts its result, so doesn't yield an lvalue per ANSI C.

* goops.c (s_scm_sys_set_object_setter_x): use
SCM_SET_ENTITY_SETTER.
(clear_method_cache): use SCM_SET_ENTITY_PROCEDURE.

* gc.h (SCM_GC_SET_CARD_BVEC): new macro.  SCM_GC_CARD_BVEC casts
its result, so doesn't yield an lvalue per ANSI C.
(SCM_GC_SET_CARD_FLAGS): ditto for SCM_GC_GET_CARD_FLAGS.
(SCM_GC_CLR_CARD_FLAGS): redefined in terms of
SCM_GC_SET_CARD_FLAGS.
(SCM_GC_SET_CARD_FLAG, SCM_GC_CLR_CARD_FLAGS): ditto.

* gc.c (INIT_CARD): use the explicit setter macro to set the bvec.
This commit is contained in:
Michael Livshin 2001-01-11 21:03:18 +00:00
parent 60d02d0914
commit 322ec19d3c
5 changed files with 35 additions and 7 deletions

View file

@ -1,3 +1,23 @@
2001-01-11 Michael Livshin <mlivshin@bigfoot.com>
from Matthias Köppe:
* objects.h (SCM_SET_ENTITY_SETTER): new macro. SCM_ENTITY_SETTER
casts its result, so doesn't yield an lvalue per ANSI C.
* goops.c (s_scm_sys_set_object_setter_x): use
SCM_SET_ENTITY_SETTER.
(clear_method_cache): use SCM_SET_ENTITY_PROCEDURE.
* gc.h (SCM_GC_SET_CARD_BVEC): new macro. SCM_GC_CARD_BVEC casts
its result, so doesn't yield an lvalue per ANSI C.
(SCM_GC_SET_CARD_FLAGS): ditto for SCM_GC_GET_CARD_FLAGS.
(SCM_GC_CLR_CARD_FLAGS): redefined in terms of
SCM_GC_SET_CARD_FLAGS.
(SCM_GC_SET_CARD_FLAG, SCM_GC_CLR_CARD_FLAGS): ditto.
* gc.c (INIT_CARD): use the explicit setter macro to set the bvec.
2001-01-08 Gary Houston <ghouston@arglist.com> 2001-01-08 Gary Houston <ghouston@arglist.com>
* validate.h (SCM_VALIDATE_SUBSTRING_SPEC_COPY): new macro. * validate.h (SCM_VALIDATE_SUBSTRING_SPEC_COPY): new macro.

View file

@ -2026,7 +2026,7 @@ int scm_n_heap_segs = 0;
#define INIT_CARD(card, span) \ #define INIT_CARD(card, span) \
do { \ do { \
SCM_GC_CARD_BVEC (card) = get_bvec (); \ SCM_GC_SET_CARD_BVEC (card, get_bvec ()); \
if ((span) == 2) \ if ((span) == 2) \
SCM_GC_SET_CARD_DOUBLECELL (card); \ SCM_GC_SET_CARD_DOUBLECELL (card); \
} while (0) } while (0)

View file

@ -94,14 +94,19 @@ typedef scm_cell * SCM_CELLPTR;
SCM_PTR_LT ((scm_cell *) (x), SCM_GC_CELL_CARD (x) + SCM_GC_CARD_N_HEADER_CELLS) SCM_PTR_LT ((scm_cell *) (x), SCM_GC_CELL_CARD (x) + SCM_GC_CARD_N_HEADER_CELLS)
#define SCM_GC_CARD_BVEC(card) ((scm_c_bvec_limb_t *) ((card)->word_0)) #define SCM_GC_CARD_BVEC(card) ((scm_c_bvec_limb_t *) ((card)->word_0))
#define SCM_GC_SET_CARD_BVEC(card, bvec) \
((card)->word_0 = (scm_bits_t) (bvec))
#define SCM_GC_GET_CARD_FLAGS(card) ((long) ((card)->word_1)) #define SCM_GC_GET_CARD_FLAGS(card) ((long) ((card)->word_1))
#define SCM_GC_SET_CARD_FLAGS(card, flags) (SCM_GC_GET_CARD_FLAGS (card) = (flags)) #define SCM_GC_SET_CARD_FLAGS(card, flags) \
#define SCM_GC_CLR_CARD_FLAGS(card) (SCM_GC_GET_CARD_FLAGS (card) = 0L) ((card)->word_1 = (scm_bits_t) (flags))
#define SCM_GC_CLR_CARD_FLAGS(card) (SCM_GC_SET_CARD_FLAGS (card, 0L))
#define SCM_GC_GET_CARD_FLAG(card, shift) (SCM_GC_GET_CARD_FLAGS (card) & (1L << (shift))) #define SCM_GC_GET_CARD_FLAG(card, shift) (SCM_GC_GET_CARD_FLAGS (card) & (1L << (shift)))
#define SCM_GC_SET_CARD_FLAG(card, shift) (SCM_GC_GET_CARD_FLAGS (card) |= (1L << (shift))) #define SCM_GC_SET_CARD_FLAG(card, shift) \
#define SCM_GC_CLR_CARD_FLAG(card, shift) (SCM_GC_GET_CARD_FLAGS (card) &= ~(1L << (shift))) (SCM_GC_SET_CARD_FLAGS (card, SCM_GC_GET_CARD_FLAGS(card) | (1L << (shift))))
#define SCM_GC_CLR_CARD_FLAG(card, shift) \
(SCM_GC_SET_CARD_FLAGS (card, SCM_GC_GET_CARD_FLAGS(card) & ~(1L << (shift))))
#define SCM_GC_CARDF_DOUBLECELL 0 #define SCM_GC_CARDF_DOUBLECELL 0

View file

@ -1366,7 +1366,7 @@ SCM_DEFINE (scm_sys_set_object_setter_x, "%set-object-setter!", 2, 0, 0,
SCM_ARG1, SCM_ARG1,
FUNC_NAME); FUNC_NAME);
if (SCM_I_ENTITYP (obj)) if (SCM_I_ENTITYP (obj))
SCM_ENTITY_SETTER (obj) = setter; SCM_SET_ENTITY_SETTER (obj, setter);
else else
SCM_OPERATOR_CLASS (obj)->setter = setter; SCM_OPERATOR_CLASS (obj)->setter = setter;
return SCM_UNSPECIFIED; return SCM_UNSPECIFIED;
@ -1545,7 +1545,8 @@ scm_make_method_cache (SCM gf)
static void static void
clear_method_cache (SCM gf) clear_method_cache (SCM gf)
{ {
SCM_ENTITY_PROCEDURE (gf) = scm_make_method_cache (gf); SCM cache = scm_make_method_cache (gf);
SCM_SET_ENTITY_PROCEDURE (gf, cache);
SCM_SLOT (gf, scm_si_used_by) = SCM_BOOL_F; SCM_SLOT (gf, scm_si_used_by) = SCM_BOOL_F;
} }

View file

@ -94,6 +94,8 @@
#define SCM_SET_ENTITY_PROCEDURE(obj,v) \ #define SCM_SET_ENTITY_PROCEDURE(obj,v) \
(SCM_STRUCT_DATA (obj) [scm_struct_i_procedure] = SCM_UNPACK (v)) (SCM_STRUCT_DATA (obj) [scm_struct_i_procedure] = SCM_UNPACK (v))
#define SCM_ENTITY_SETTER(obj) (SCM_PACK (SCM_STRUCT_DATA (obj)[scm_struct_i_setter])) #define SCM_ENTITY_SETTER(obj) (SCM_PACK (SCM_STRUCT_DATA (obj)[scm_struct_i_setter]))
#define SCM_SET_ENTITY_SETTER(obj, v) \
(SCM_STRUCT_DATA (obj) [scm_struct_i_setter] = SCM_UNPACK (v))
#define SCM_SET_CLASS_DESTRUCTOR(c, d) SCM_SET_VTABLE_DESTRUCTOR (c, d) #define SCM_SET_CLASS_DESTRUCTOR(c, d) SCM_SET_VTABLE_DESTRUCTOR (c, d)
#define SCM_SET_CLASS_INSTANCE_SIZE(c, s) \ #define SCM_SET_CLASS_INSTANCE_SIZE(c, s) \