diff options
Diffstat (limited to 'libguile')
-rw-r--r-- | libguile/__scm.h | 3 | ||||
-rw-r--r-- | libguile/bdw-gc.h | 8 | ||||
-rw-r--r-- | libguile/deprecation.c | 6 | ||||
-rw-r--r-- | libguile/expand.c | 27 | ||||
-rw-r--r-- | libguile/filesys.c | 6 | ||||
-rw-r--r-- | libguile/finalizers.c | 2 | ||||
-rw-r--r-- | libguile/foreign.c | 2 | ||||
-rw-r--r-- | libguile/gen-scmconfig.c | 19 | ||||
-rw-r--r-- | libguile/guardians.c | 11 | ||||
-rw-r--r-- | libguile/numbers.c | 2 | ||||
-rw-r--r-- | libguile/ports.c | 4 | ||||
-rw-r--r-- | libguile/smob.c | 2 | ||||
-rw-r--r-- | libguile/struct.c | 2 | ||||
-rw-r--r-- | libguile/values.c | 9 | ||||
-rw-r--r-- | libguile/values.h | 5 | ||||
-rw-r--r-- | libguile/vectors.c | 5 | ||||
-rw-r--r-- | libguile/weak-set.c | 18 | ||||
-rw-r--r-- | libguile/weak-table.c | 24 | ||||
-rw-r--r-- | libguile/weak-vector.c | 8 |
19 files changed, 83 insertions, 80 deletions
diff --git a/libguile/__scm.h b/libguile/__scm.h index d0a421371..da118588d 100644 --- a/libguile/__scm.h +++ b/libguile/__scm.h @@ -126,7 +126,8 @@ /* The SCM_ALIGNED macro, when defined, can be used to instruct the compiler * to honor the given alignment constraint. */ -#if defined __GNUC__ +/* Sun Studio supports alignment since Sun Studio 12 */ +#if defined __GNUC__ || (defined( __SUNPRO_C ) && (__SUNPRO_C - 0 >= 0x590)) # define SCM_ALIGNED(x) __attribute__ ((aligned (x))) #elif defined __INTEL_COMPILER # define SCM_ALIGNED(x) __declspec (align (x)) diff --git a/libguile/bdw-gc.h b/libguile/bdw-gc.h index 61c11eb94..2e1fce27b 100644 --- a/libguile/bdw-gc.h +++ b/libguile/bdw-gc.h @@ -1,7 +1,7 @@ #ifndef SCM_BDW_GC_H #define SCM_BDW_GC_H -/* Copyright (C) 2006, 2008, 2009, 2011 Free Software Foundation, Inc. +/* Copyright (C) 2006, 2008, 2009, 2011, 2012 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -46,12 +46,6 @@ # include <gc/gc_local_alloc.h> #endif -#if (defined GC_VERSION_MAJOR) && (GC_VERSION_MAJOR >= 7) -/* This type was provided by `libgc' 6.x. */ -typedef void *GC_PTR; -#endif - - /* Return true if PTR points to the heap. */ #define SCM_I_IS_POINTER_TO_THE_HEAP(ptr) \ (GC_base (ptr) != NULL) diff --git a/libguile/deprecation.c b/libguile/deprecation.c index 5c1a246c2..1be3aea7e 100644 --- a/libguile/deprecation.c +++ b/libguile/deprecation.c @@ -34,12 +34,6 @@ #include "libguile/private-options.h" - -/* Windows defines. */ -#ifdef __MINGW32__ -#define vsnprintf _vsnprintf -#endif - struct issued_warning { diff --git a/libguile/expand.c b/libguile/expand.c index 3f23d4f8f..cb32e371c 100644 --- a/libguile/expand.c +++ b/libguile/expand.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011 +/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012 * Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or @@ -49,9 +49,12 @@ static const char* exp_names[SCM_NUM_EXPANDED_TYPES]; static const char** exp_field_names[SCM_NUM_EXPANDED_TYPES]; -#define VOID(src) \ +/* The trailing underscores on these first to are to avoid spurious + conflicts with macros defined on MinGW. */ + +#define VOID_(src) \ SCM_MAKE_EXPANDED_VOID(src) -#define CONST(src, exp) \ +#define CONST_(src, exp) \ SCM_MAKE_EXPANDED_CONST(src, exp) #define PRIMITIVE_REF_TYPE(src, name) \ SCM_MAKE_EXPANDED_PRIMITIVE_REF_TYPE(src, name) @@ -375,7 +378,7 @@ expand (SCM exp, SCM env) return TOPLEVEL_REF (SCM_BOOL_F, exp); } else - return CONST (SCM_BOOL_F, exp); + return CONST_ (SCM_BOOL_F, exp); } static SCM @@ -433,7 +436,7 @@ expand_and (SCM expr, SCM env) const SCM cdr_expr = CDR (expr); if (scm_is_null (cdr_expr)) - return CONST (SCM_BOOL_F, SCM_BOOL_T); + return CONST_ (SCM_BOOL_F, SCM_BOOL_T); ASSERT_SYNTAX (scm_is_pair (cdr_expr), s_bad_expression, expr); @@ -443,7 +446,7 @@ expand_and (SCM expr, SCM env) return CONDITIONAL (scm_source_properties (expr), expand (CAR (cdr_expr), env), expand_and (cdr_expr, env), - CONST (SCM_BOOL_F, SCM_BOOL_F)); + CONST_ (SCM_BOOL_F, SCM_BOOL_F)); } static SCM @@ -471,7 +474,7 @@ expand_cond_clauses (SCM clause, SCM rest, int elp, int alp, SCM env) } if (scm_is_null (rest)) - rest = VOID (SCM_BOOL_F); + rest = VOID_ (SCM_BOOL_F); else rest = expand_cond_clauses (CAR (rest), CDR (rest), elp, alp, env); @@ -588,7 +591,7 @@ expand_eval_when (SCM expr, SCM env) || scm_is_true (scm_memq (sym_load, CADR (expr)))) return expand_sequence (CDDR (expr), env); else - return VOID (scm_source_properties (expr)); + return VOID_ (scm_source_properties (expr)); } static SCM @@ -602,7 +605,7 @@ expand_if (SCM expr, SCM env SCM_UNUSED) expand (CADDR (expr), env), ((length == 3) ? expand (CADDDR (expr), env) - : VOID (SCM_BOOL_F))); + : VOID_ (SCM_BOOL_F))); } /* A helper function for expand_lambda to support checking for duplicate @@ -791,7 +794,7 @@ expand_lambda_star_case (SCM clause, SCM alternate, SCM env) vars = scm_cons (scm_gensym (SCM_UNDEFINED), vars); env = scm_acons (x, CAR (vars), env); if (scm_is_symbol (x)) - inits = scm_cons (CONST (SCM_BOOL_F, SCM_BOOL_F), inits); + inits = scm_cons (CONST_ (SCM_BOOL_F, SCM_BOOL_F), inits); else { ASSERT_SYNTAX (scm_ilength (x) == 2 && scm_is_symbol (CAR (x)), @@ -1111,7 +1114,7 @@ expand_or (SCM expr, SCM env SCM_UNUSED) ASSERT_SYNTAX (length >= 0, s_bad_expression, expr); if (scm_is_null (CDR (expr))) - return CONST (SCM_BOOL_F, SCM_BOOL_F); + return CONST_ (SCM_BOOL_F, SCM_BOOL_F); else { SCM tmp = scm_gensym (SCM_UNDEFINED); @@ -1135,7 +1138,7 @@ expand_quote (SCM expr, SCM env SCM_UNUSED) ASSERT_SYNTAX (scm_ilength (cdr_expr) >= 0, s_bad_expression, expr); ASSERT_SYNTAX (scm_ilength (cdr_expr) == 1, s_expression, expr); quotee = CAR (cdr_expr); - return CONST (scm_source_properties (expr), quotee); + return CONST_ (scm_source_properties (expr), quotee); } static SCM diff --git a/libguile/filesys.c b/libguile/filesys.c index 8e90eed3e..3d5b1fb3e 100644 --- a/libguile/filesys.c +++ b/libguile/filesys.c @@ -103,9 +103,7 @@ /* Some more definitions for the native Windows port. */ #ifdef __MINGW32__ -# define mkdir(path, mode) mkdir (path) # define fsync(fd) _commit (fd) -# define fchmod(fd, mode) (-1) #endif /* __MINGW32__ */ @@ -1336,12 +1334,13 @@ SCM_DEFINE (scm_chmod, "chmod", 2, 0, 0, #define FUNC_NAME s_scm_chmod { int rv; - int fdes; object = SCM_COERCE_OUTPORT (object); +#if HAVE_FCHMOD if (scm_is_integer (object) || SCM_OPFPORTP (object)) { + int fdes; if (scm_is_integer (object)) fdes = scm_to_int (object); else @@ -1349,6 +1348,7 @@ SCM_DEFINE (scm_chmod, "chmod", 2, 0, 0, SCM_SYSCALL (rv = fchmod (fdes, scm_to_int (mode))); } else +#endif { STRING_SYSCALL (object, c_object, rv = chmod (c_object, scm_to_int (mode))); diff --git a/libguile/finalizers.c b/libguile/finalizers.c index 25aadf431..42faf7264 100644 --- a/libguile/finalizers.c +++ b/libguile/finalizers.c @@ -58,7 +58,7 @@ void scm_i_set_finalizer (void *obj, scm_t_finalizer_proc proc, void *data) { GC_finalization_proc prev; - GC_PTR prev_data; + void *prev_data; GC_REGISTER_FINALIZER_NO_ORDER (obj, proc, data, &prev, &prev_data); } diff --git a/libguile/foreign.c b/libguile/foreign.c index 072b4b62b..47077f7f8 100644 --- a/libguile/foreign.c +++ b/libguile/foreign.c @@ -96,7 +96,7 @@ register_weak_reference (SCM from, SCM to) } static void -pointer_finalizer_trampoline (GC_PTR ptr, GC_PTR data) +pointer_finalizer_trampoline (void *ptr, void *data) { scm_t_pointer_finalizer finalizer = data; finalizer (SCM_POINTER_VALUE (SCM_PACK_POINTER (ptr))); diff --git a/libguile/gen-scmconfig.c b/libguile/gen-scmconfig.c index 422f826c3..e1cc0305e 100644 --- a/libguile/gen-scmconfig.c +++ b/libguile/gen-scmconfig.c @@ -149,18 +149,17 @@ main (int argc, char *argv[]) pf ("/* limits.h not available */\n"); #endif -# ifdef TIME_WITH_SYS_TIME +#if HAVE_SYS_TIME_H pf ("#include <sys/time.h>\n"); +#else + pf ("/* sys/time.h not available */\n"); +#endif + +#if HAVE_TIME_H pf ("#include <time.h>\n"); -# else -# ifdef HAVE_SYS_TIME_H - pf ("#include <sys/time.h>\n"); -# else -# ifdef HAVE_TIME_H - pf ("#include <time.h>\n"); -# endif -# endif -# endif +#else + pf ("/* time.h not available */\n"); +#endif pf("\n"); #ifdef STDC_HEADERS diff --git a/libguile/guardians.c b/libguile/guardians.c index a3d03230a..8a0d2961c 100644 --- a/libguile/guardians.c +++ b/libguile/guardians.c @@ -1,5 +1,6 @@ -/* Copyright (C) 1998,1999,2000,2001, 2006, 2008, 2009, 2011 Free Software Foundation, Inc. - * +/* Copyright (C) 1998,1999,2000,2001, 2006, 2008, 2009, 2011, + * 2012 Free Software Foundation, Inc. + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 3 of @@ -103,7 +104,7 @@ guardian_print (SCM guardian, SCM port, scm_print_state *pstate SCM_UNUSED) /* Handle finalization of OBJ which is guarded by the guardians listed in GUARDIAN_LIST. */ static void -finalize_guarded (GC_PTR ptr, GC_PTR finalizer_data) +finalize_guarded (void *ptr, void *finalizer_data) { SCM cell_pool; SCM obj, guardian_list, proxied_finalizer; @@ -166,7 +167,7 @@ finalize_guarded (GC_PTR ptr, GC_PTR finalizer_data) /* Re-register the finalizer that was in place before we installed this one. */ GC_finalization_proc finalizer, prev_finalizer; - GC_PTR finalizer_data, prev_finalizer_data; + void *finalizer_data, *prev_finalizer_data; finalizer = (GC_finalization_proc) SCM_UNPACK_POINTER (SCM_CAR (proxied_finalizer)); finalizer_data = SCM_UNPACK_POINTER (SCM_CDR (proxied_finalizer)); @@ -206,7 +207,7 @@ scm_i_guard (SCM guardian, SCM obj) the very beginning of an object's lifetime (e.g., see `SCM_NEWSMOB') or by this function. */ GC_finalization_proc prev_finalizer; - GC_PTR prev_data; + void *prev_data; SCM guardians_for_obj, finalizer_data; g->live++; diff --git a/libguile/numbers.c b/libguile/numbers.c index 20877d3ca..7bbdc56c0 100644 --- a/libguile/numbers.c +++ b/libguile/numbers.c @@ -179,7 +179,7 @@ static mpz_t z_negative_one; /* Clear the `mpz_t' embedded in bignum PTR. */ static void -finalize_bignum (GC_PTR ptr, GC_PTR data) +finalize_bignum (void *ptr, void *data) { SCM bignum; diff --git a/libguile/ports.c b/libguile/ports.c index f91b80ee3..11142ba65 100644 --- a/libguile/ports.c +++ b/libguile/ports.c @@ -553,7 +553,7 @@ do_free (void *body_data) /* Finalize the object (a port) pointed to by PTR. */ static void -finalize_port (GC_PTR ptr, GC_PTR data) +finalize_port (void *ptr, void *data) { SCM port = SCM_PACK_POINTER (ptr); @@ -925,7 +925,7 @@ scm_i_set_default_port_conversion_handler (scm_t_string_failed_conversion_handle } static void -finalize_iconv_descriptors (GC_PTR ptr, GC_PTR data) +finalize_iconv_descriptors (void *ptr, void *data) { close_iconv_descriptors (ptr); } diff --git a/libguile/smob.c b/libguile/smob.c index cbb3d7bb3..c2347f3be 100644 --- a/libguile/smob.c +++ b/libguile/smob.c @@ -377,7 +377,7 @@ scm_gc_mark (SCM o) /* Finalize SMOB by calling its SMOB type's free function, if any. */ static void -finalize_smob (GC_PTR ptr, GC_PTR data) +finalize_smob (void *ptr, void *data) { SCM smob; size_t (* free_smob) (SCM); diff --git a/libguile/struct.c b/libguile/struct.c index 12a884256..e8182a2fd 100644 --- a/libguile/struct.c +++ b/libguile/struct.c @@ -411,7 +411,7 @@ SCM_DEFINE (scm_struct_vtable_p, "struct-vtable?", 1, 0, 0, /* Finalization: invoke the finalizer of the struct pointed to by PTR. */ static void -struct_finalizer_trampoline (GC_PTR ptr, GC_PTR unused_data) +struct_finalizer_trampoline (void *ptr, void *unused_data) { SCM obj = PTR2SCM (ptr); scm_t_struct_finalize finalize = SCM_STRUCT_FINALIZER (obj); diff --git a/libguile/values.c b/libguile/values.c index 55577f291..d135da01f 100644 --- a/libguile/values.c +++ b/libguile/values.c @@ -67,6 +67,15 @@ print_values (SCM obj, SCM pwps) return SCM_UNSPECIFIED; } +size_t +scm_c_nvalues (SCM obj) +{ + if (SCM_LIKELY (SCM_VALUESP (obj))) + return scm_ilength (scm_struct_ref (obj, SCM_INUM0)); + else + return 1; +} + SCM scm_c_value_ref (SCM obj, size_t idx) { diff --git a/libguile/values.h b/libguile/values.h index f11c9d9de..3dbd0b742 100644 --- a/libguile/values.h +++ b/libguile/values.h @@ -33,8 +33,9 @@ SCM_API SCM scm_values_vtable; SCM_INTERNAL void scm_i_extract_values_2 (SCM obj, SCM *p1, SCM *p2); SCM_API SCM scm_values (SCM args); -SCM_API SCM scm_c_values (SCM *base, size_t nvalues); -SCM_API SCM scm_c_value_ref (SCM values, size_t idx); +SCM_API SCM scm_c_values (SCM *base, size_t n); +SCM_API size_t scm_c_nvalues (SCM obj); +SCM_API SCM scm_c_value_ref (SCM obj, size_t idx); SCM_INTERNAL void scm_init_values (void); #endif /* SCM_VALUES_H */ diff --git a/libguile/vectors.c b/libguile/vectors.c index 1640725e5..920ead10e 100644 --- a/libguile/vectors.c +++ b/libguile/vectors.c @@ -1,5 +1,6 @@ -/* Copyright (C) 1995,1996,1998,1999,2000,2001, 2006, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. - * +/* Copyright (C) 1995,1996,1998,1999,2000,2001, 2006, 2008, 2009, 2010, + * 2011, 2012 Free Software Foundation, Inc. + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 3 of diff --git a/libguile/weak-set.c b/libguile/weak-set.c index 33402b548..d648dbd34 100644 --- a/libguile/weak-set.c +++ b/libguile/weak-set.c @@ -174,11 +174,11 @@ move_weak_entry (scm_t_weak_entry *from, scm_t_weak_entry *to) if (copy.key && SCM_HEAP_OBJECT_P (SCM_PACK (copy.key))) { #ifdef HAVE_GC_MOVE_DISAPPEARING_LINK - GC_move_disappearing_link ((GC_PTR) &from->key, (GC_PTR) &to->key); + GC_move_disappearing_link ((void **) &from->key, (void **) &to->key); #else - GC_unregister_disappearing_link ((GC_PTR) &from->key); - SCM_I_REGISTER_DISAPPEARING_LINK ((GC_PTR) &to->key, - (GC_PTR) to->key); + GC_unregister_disappearing_link ((void **) &from->key); + SCM_I_REGISTER_DISAPPEARING_LINK ((void **) &to->key, + to->key); #endif } } @@ -418,8 +418,8 @@ resize_set (scm_t_weak_set *set) new_entries[new_k].key = copy.key; if (SCM_HEAP_OBJECT_P (SCM_PACK (copy.key))) - SCM_I_REGISTER_DISAPPEARING_LINK ((GC_PTR) &new_entries[new_k].key, - (GC_PTR) new_entries[new_k].key); + SCM_I_REGISTER_DISAPPEARING_LINK ((void **) &new_entries[new_k].key, + (void *) new_entries[new_k].key); } } @@ -579,8 +579,8 @@ weak_set_add_x (scm_t_weak_set *set, unsigned long hash, entries[k].key = SCM_UNPACK (obj); if (SCM_HEAP_OBJECT_P (obj)) - SCM_I_REGISTER_DISAPPEARING_LINK ((GC_PTR) &entries[k].key, - (GC_PTR) SCM2PTR (obj)); + SCM_I_REGISTER_DISAPPEARING_LINK ((void **) &entries[k].key, + (void *) SCM2PTR (obj)); return obj; } @@ -631,7 +631,7 @@ weak_set_remove_x (scm_t_weak_set *set, unsigned long hash, entries[k].key = 0; if (SCM_HEAP_OBJECT_P (SCM_PACK (copy.key))) - GC_unregister_disappearing_link ((GC_PTR) &entries[k].key); + GC_unregister_disappearing_link ((void **) &entries[k].key); if (--set->n_items < set->lower) resize_set (set); diff --git a/libguile/weak-table.c b/libguile/weak-table.c index be73e1bfa..9ef6674e1 100644 --- a/libguile/weak-table.c +++ b/libguile/weak-table.c @@ -130,14 +130,14 @@ register_disappearing_links (scm_t_weak_entry *entry, if (SCM_UNPACK (k) && SCM_HEAP_OBJECT_P (k) && (kind == SCM_WEAK_TABLE_KIND_KEY || kind == SCM_WEAK_TABLE_KIND_BOTH)) - SCM_I_REGISTER_DISAPPEARING_LINK ((GC_PTR) &entry->key, - (GC_PTR) SCM2PTR (k)); + SCM_I_REGISTER_DISAPPEARING_LINK ((void **) &entry->key, + SCM2PTR (k)); if (SCM_UNPACK (v) && SCM_HEAP_OBJECT_P (v) && (kind == SCM_WEAK_TABLE_KIND_VALUE || kind == SCM_WEAK_TABLE_KIND_BOTH)) - SCM_I_REGISTER_DISAPPEARING_LINK ((GC_PTR) &entry->value, - (GC_PTR) SCM2PTR (v)); + SCM_I_REGISTER_DISAPPEARING_LINK ((void **) &entry->value, + SCM2PTR (v)); } static void @@ -145,10 +145,10 @@ unregister_disappearing_links (scm_t_weak_entry *entry, scm_t_weak_table_kind kind) { if (kind == SCM_WEAK_TABLE_KIND_KEY || kind == SCM_WEAK_TABLE_KIND_BOTH) - GC_unregister_disappearing_link ((GC_PTR) &entry->key); + GC_unregister_disappearing_link ((void **) &entry->key); if (kind == SCM_WEAK_TABLE_KIND_VALUE || kind == SCM_WEAK_TABLE_KIND_BOTH) - GC_unregister_disappearing_link ((GC_PTR) &entry->value); + GC_unregister_disappearing_link ((void **) &entry->value); } static void @@ -159,10 +159,10 @@ move_disappearing_links (scm_t_weak_entry *from, scm_t_weak_entry *to, && SCM_HEAP_OBJECT_P (key)) { #ifdef HAVE_GC_MOVE_DISAPPEARING_LINK - GC_move_disappearing_link ((GC_PTR) &from->key, (GC_PTR) &to->key); + GC_move_disappearing_link ((void **) &from->key, (void **) &to->key); #else - GC_unregister_disappearing_link (&from->key); - SCM_I_REGISTER_DISAPPEARING_LINK (&to->key, SCM2PTR (key)); + GC_unregister_disappearing_link ((void **) &from->key); + SCM_I_REGISTER_DISAPPEARING_LINK ((void **) &to->key, SCM2PTR (key)); #endif } @@ -170,10 +170,10 @@ move_disappearing_links (scm_t_weak_entry *from, scm_t_weak_entry *to, && SCM_HEAP_OBJECT_P (value)) { #ifdef HAVE_GC_MOVE_DISAPPEARING_LINK - GC_move_disappearing_link ((GC_PTR) &from->value, (GC_PTR) &to->value); + GC_move_disappearing_link ((void **) &from->value, (void **) &to->value); #else - GC_unregister_disappearing_link (&from->value); - SCM_I_REGISTER_DISAPPEARING_LINK (&to->value, SCM2PTR (value)); + GC_unregister_disappearing_link ((void **) &from->value); + SCM_I_REGISTER_DISAPPEARING_LINK ((void **) &to->value, SCM2PTR (value)); #endif } } diff --git a/libguile/weak-vector.c b/libguile/weak-vector.c index 23bc386d4..3e90b3d57 100644 --- a/libguile/weak-vector.c +++ b/libguile/weak-vector.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1995,1996,1998,2000,2001, 2003, 2006, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. +/* Copyright (C) 1995,1996,1998,2000,2001, 2003, 2006, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -171,13 +171,13 @@ scm_c_weak_vector_set_x (SCM wv, size_t k, SCM x) elts = SCM_I_VECTOR_WELTS (wv); if (prev && SCM_HEAP_OBJECT_P (SCM_PACK_POINTER (prev))) - GC_unregister_disappearing_link ((GC_PTR) &elts[k]); + GC_unregister_disappearing_link ((void **) &elts[k]); elts[k] = x; if (SCM_HEAP_OBJECT_P (x)) - SCM_I_REGISTER_DISAPPEARING_LINK ((GC_PTR) &elts[k], - (GC_PTR) SCM2PTR (x)); + SCM_I_REGISTER_DISAPPEARING_LINK ((void **) &elts[k], + SCM2PTR (x)); } |