1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 03:40:34 +02:00

deprecate scm_immutable_{double_,}cell

* libguile/inline.h:
* libguile/deprecated.h:
* libguile/deprecated.c (scm_immutable_cell, scm_immutable_double_cell):
  Deprecate these, as the GC_STUBBORN API doesn't do anything any more.

* libguile/strings.c (scm_i_c_make_symbol): Change the one use of
  scm_immutable_double_cell to scm_double_cell.
This commit is contained in:
Andy Wingo 2011-05-26 12:34:30 +02:00
parent f567a43cf0
commit 65619ebe9a
4 changed files with 32 additions and 72 deletions

View file

@ -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

View file

@ -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);

View file

@ -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

View file

@ -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