* objects.h (SCM_SET_ENTITY_SETTER): new macro. SCM_ENTITY_SETTER
authorMichael Livshin <mlivshin@bigfoot.com>
Thu, 11 Jan 2001 21:03:18 +0000 (21:03 +0000)
committerMichael Livshin <mlivshin@bigfoot.com>
Thu, 11 Jan 2001 21:03:18 +0000 (21:03 +0000)
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.

libguile/ChangeLog
libguile/gc.c
libguile/gc.h
libguile/goops.c
libguile/objects.h

index ac082ca..8c286e6 100644 (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>
 
        * validate.h (SCM_VALIDATE_SUBSTRING_SPEC_COPY): new macro.
index d676765..5d4aa00 100644 (file)
@@ -2026,7 +2026,7 @@ int scm_n_heap_segs = 0;
 
 #define INIT_CARD(card, span) \
     do { \
-      SCM_GC_CARD_BVEC (card) = get_bvec (); \
+      SCM_GC_SET_CARD_BVEC (card, get_bvec ()); \
       if ((span) == 2) \
         SCM_GC_SET_CARD_DOUBLECELL (card); \
     } while (0)
index 893c262..1885262 100644 (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)
 
 #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_SET_CARD_FLAGS(card, flags) (SCM_GC_GET_CARD_FLAGS (card) = (flags))
-#define SCM_GC_CLR_CARD_FLAGS(card) (SCM_GC_GET_CARD_FLAGS (card) = 0L)
+#define SCM_GC_SET_CARD_FLAGS(card, flags) \
+    ((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_SET_CARD_FLAG(card, shift) (SCM_GC_GET_CARD_FLAGS (card) |= (1L << (shift)))
-#define SCM_GC_CLR_CARD_FLAG(card, shift) (SCM_GC_GET_CARD_FLAGS (card) &= ~(1L << (shift)))
+#define SCM_GC_SET_CARD_FLAG(card, 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
 
index 0c4ffa6..4d7ce14 100644 (file)
@@ -1366,7 +1366,7 @@ SCM_DEFINE (scm_sys_set_object_setter_x, "%set-object-setter!", 2, 0, 0,
              SCM_ARG1,
              FUNC_NAME);
   if (SCM_I_ENTITYP (obj))
-    SCM_ENTITY_SETTER (obj) = setter;
+    SCM_SET_ENTITY_SETTER (obj, setter);
   else
     SCM_OPERATOR_CLASS (obj)->setter = setter;
   return SCM_UNSPECIFIED;
@@ -1545,7 +1545,8 @@ scm_make_method_cache (SCM gf)
 static void
 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;
 }
 
index aa5836e..110158a 100644 (file)
@@ -94,6 +94,8 @@
 #define SCM_SET_ENTITY_PROCEDURE(obj,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_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_INSTANCE_SIZE(c, s) \