diff --git a/libguile/goops.c b/libguile/goops.c index 9ac9e9afa..520b1c25d 100644 --- a/libguile/goops.c +++ b/libguile/goops.c @@ -1905,7 +1905,7 @@ scm_c_extend_primitive_generic (SCM extended, SCM extension) gext = scm_call_2 (SCM_VARIABLE_REF (scm_var_make_extended_generic), gf, SCM_SNAME (extension)); - *SCM_SUBR_GENERIC (extension) = gext; + SCM_SET_SUBR_GENERIC (extension, gext); } else { diff --git a/libguile/procs.c b/libguile/procs.c index d536dfc3b..fa32277fe 100644 --- a/libguile/procs.c +++ b/libguile/procs.c @@ -92,7 +92,7 @@ scm_c_make_subr_with_generic (const char *name, long type, SCM (*fcn) (), SCM *gf) { SCM subr = scm_c_make_subr (name, type, fcn); - SCM_SUBR_GENERIC (subr) = gf; + SCM_SET_SUBR_GENERIC_LOC (subr, gf); return subr; } diff --git a/libguile/procs.h b/libguile/procs.h index 122187cb9..c2fc7589a 100644 --- a/libguile/procs.h +++ b/libguile/procs.h @@ -47,6 +47,8 @@ typedef struct #define SCM_DSUBRF(x) ((double (*)()) SCM_CELL_WORD_1 (x)) #define SCM_SUBR_PROPS(x) (SCM_SUBR_ENTRY (x).properties) #define SCM_SUBR_GENERIC(x) (SCM_SUBR_ENTRY (x).generic) +#define SCM_SET_SUBR_GENERIC(x, g) (*SCM_SUBR_ENTRY (x).generic = (g)) +#define SCM_SET_SUBR_GENERIC_LOC(x, g) (SCM_SUBR_ENTRY (x).generic = (g)) #define SCM_CCLO_LENGTH(x) (SCM_CELL_WORD_0 (x) >> 8) #define SCM_MAKE_CCLO_TAG(v) (((v) << 8) + scm_tc7_cclo)