[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
- [Patch] Casts do not yield lvalues,
Matthias Koeppe <=