diff --git a/libguile/deprecated.c b/libguile/deprecated.c index c7e2aae2d..2026788c6 100644 --- a/libguile/deprecated.c +++ b/libguile/deprecated.c @@ -2595,6 +2595,28 @@ scm_internal_dynamic_wind (scm_t_guard before, return ans; } + + +SCM +scm_immutable_cell (scm_t_bits car, scm_t_bits cdr) +{ + scm_c_issue_deprecation_warning + ("scm_immutable_cell is deprecated. Use scm_cell instead."); + + return scm_cell (car, cdr); +} + +SCM +scm_immutable_double_cell (scm_t_bits car, scm_t_bits cbr, + scm_t_bits ccr, scm_t_bits cdr) +{ + scm_c_issue_deprecation_warning + ("scm_immutable_double_cell is deprecated. Use scm_double_cell instead."); + + return scm_double_cell (car, cbr, ccr, cdr); +} + + void diff --git a/libguile/deprecated.h b/libguile/deprecated.h index 6e832b8ec..82415ea2e 100644 --- a/libguile/deprecated.h +++ b/libguile/deprecated.h @@ -792,6 +792,14 @@ SCM_DEPRECATED SCM scm_struct_table; SCM_DEPRECATED SCM scm_struct_create_handle (SCM obj); + + +/* Deprecated 26-05-2011, as the GC_STUBBORN API doesn't do anything any + more. */ +SCM_API SCM scm_immutable_cell (scm_t_bits car, scm_t_bits cdr); +SCM_API SCM scm_immutable_double_cell (scm_t_bits car, scm_t_bits cbr, + scm_t_bits ccr, scm_t_bits cdr); + void scm_i_init_deprecated (void); diff --git a/libguile/inline.h b/libguile/inline.h index 835edcc9a..e2697c929 100644 --- a/libguile/inline.h +++ b/libguile/inline.h @@ -83,14 +83,9 @@ SCM_API SCM scm_cell (scm_t_bits car, scm_t_bits cdr); -SCM_API SCM scm_immutable_cell (scm_t_bits car, scm_t_bits cdr); SCM_API SCM scm_double_cell (scm_t_bits car, scm_t_bits cbr, scm_t_bits ccr, scm_t_bits cdr); -SCM_API SCM scm_immutable_double_cell (scm_t_bits car, scm_t_bits cbr, - scm_t_bits ccr, scm_t_bits cdr); SCM_API SCM scm_words (scm_t_bits car, scm_t_uint16 n_words); -/* no immutable words for now, would require initialization at the same time as - allocation */ SCM_API SCM scm_array_handle_ref (scm_t_array_handle *h, ssize_t pos); SCM_API void scm_array_handle_set (scm_t_array_handle *h, ssize_t pos, SCM val); @@ -135,26 +130,6 @@ scm_cell (scm_t_bits car, scm_t_bits cdr) return cell; } -#ifndef SCM_INLINE_C_INCLUDING_INLINE_H -SCM_C_EXTERN_INLINE -#endif -SCM -scm_immutable_cell (scm_t_bits car, scm_t_bits cdr) -{ - SCM cell = PTR2SCM (GC_MALLOC_STUBBORN (sizeof (scm_t_cell))); - - /* Initialize the type slot last so that the cell is ignored by the GC - until it is completely initialized. This is only relevant when the GC - can actually run during this code, which it can't since the GC only runs - when all other threads are stopped. */ - SCM_GC_SET_CELL_WORD (cell, 1, cdr); - SCM_GC_SET_CELL_WORD (cell, 0, car); - - GC_END_STUBBORN_CHANGE (SCM2PTR (cell)); - - return cell; -} - #ifndef SCM_INLINE_C_INCLUDING_INLINE_H SCM_C_EXTERN_INLINE #endif @@ -198,51 +173,6 @@ scm_double_cell (scm_t_bits car, scm_t_bits cbr, return z; } -#ifndef SCM_INLINE_C_INCLUDING_INLINE_H -SCM_C_EXTERN_INLINE -#endif -SCM -scm_immutable_double_cell (scm_t_bits car, scm_t_bits cbr, - scm_t_bits ccr, scm_t_bits cdr) -{ - SCM z; - - z = PTR2SCM (GC_MALLOC_STUBBORN (2 * sizeof (scm_t_cell))); - /* Initialize the type slot last so that the cell is ignored by the - GC until it is completely initialized. This is only relevant - when the GC can actually run during this code, which it can't - since the GC only runs when all other threads are stopped. - */ - SCM_GC_SET_CELL_WORD (z, 1, cbr); - SCM_GC_SET_CELL_WORD (z, 2, ccr); - SCM_GC_SET_CELL_WORD (z, 3, cdr); - SCM_GC_SET_CELL_WORD (z, 0, car); - - GC_END_STUBBORN_CHANGE (SCM2PTR (z)); - - /* When this function is inlined, it's possible that the last - SCM_GC_SET_CELL_WORD above will be adjacent to a following - initialization of z. E.g., it occurred in scm_make_real. GCC - from around version 3 (e.g., certainly 3.2) began taking - advantage of strict C aliasing rules which say that it's OK to - interchange the initialization above and the one below when the - pointer types appear to differ sufficiently. We don't want that, - of course. GCC allows this behaviour to be disabled with the - -fno-strict-aliasing option, but would also need to be supplied - by Guile users. Instead, the following statements prevent the - reordering. - */ -#ifdef __GNUC__ - __asm__ volatile ("" : : : "memory"); -#else - /* portable version, just in case any other compiler does the same - thing. */ - scm_remember_upto_here_1 (z); -#endif - - return z; -} - #ifndef SCM_INLINE_C_INCLUDING_INLINE_H SCM_C_EXTERN_INLINE #endif diff --git a/libguile/strings.c b/libguile/strings.c index bf637041c..0d379ff68 100644 --- a/libguile/strings.c +++ b/libguile/strings.c @@ -741,8 +741,8 @@ scm_i_c_make_symbol (const char *name, size_t len, SCM buf = make_stringbuf (len); memcpy (STRINGBUF_CHARS (buf), name, len); - return scm_immutable_double_cell (scm_tc7_symbol | flags, SCM_UNPACK (buf), - (scm_t_bits) hash, SCM_UNPACK (props)); + return scm_double_cell (scm_tc7_symbol | flags, SCM_UNPACK (buf), + (scm_t_bits) hash, SCM_UNPACK (props)); } /* Returns the number of characters in SYM. This may be different