bug-guile
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Patch] Casts do not yield lvalues


From: Matthias Koeppe
Subject: [Patch] Casts do not yield lvalues
Date: 11 Jan 2001 12:26:58 +0100
User-agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.6

I am trying to compile current CVS Guile using the Sun Forte 64-bit
compilers (Sun WorkShop 6 update 1 C 5.2).  In several places, the
compiler complains that "a cast does not yield an lvalue".  This is
standard behaviour, according to ISO C 99.

The places in question are macros expanding to casts, which are used
both as a getter and a setter.  A patch is included below.

Index: libguile/gc.c
===================================================================
RCS file: /cvs/guile/guile-core/libguile/gc.c,v
retrieving revision 1.176
diff -u -r1.176 gc.c
--- libguile/gc.c       2000/12/28 16:49:09     1.176
+++ libguile/gc.c       2001/01/11 11:15:30
@@ -2026,7 +2026,7 @@
 
 #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: libguile/gc.h
===================================================================
RCS file: /cvs/guile/guile-core/libguile/gc.h,v
retrieving revision 1.69
diff -u -r1.69 gc.h
--- libguile/gc.h       2000/12/28 16:49:09     1.69
+++ libguile/gc.h       2001/01/11 11:15:30
@@ -94,14 +94,19 @@
     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: libguile/goops.c
===================================================================
RCS file: /cvs/guile/guile-core/libguile/goops.c,v
retrieving revision 1.12
diff -u -r1.12 goops.c
--- libguile/goops.c    2000/12/21 17:07:38     1.12
+++ libguile/goops.c    2001/01/11 11:15:30
@@ -1366,7 +1366,7 @@
              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 @@
 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: libguile/objects.h
===================================================================
RCS file: /cvs/guile/guile-core/libguile/objects.h,v
retrieving revision 1.29
diff -u -r1.29 objects.h
--- libguile/objects.h  2000/10/25 14:50:28     1.29
+++ libguile/objects.h  2001/01/11 11:15:30
@@ -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) \


-- 
Matthias Köppe -- http://www.math.uni-magdeburg.de/~mkoeppe



reply via email to

[Prev in Thread] Current Thread [Next in Thread]