mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 11:50:28 +02:00
* api.txt, data-rep.texi: Renamed the struct scm_cell to scm_t_cell. * data-rep.texi: Renamed scm_alloc_cell to scm_cell and scm_alloc_double_cell to scm_double_cell. Changes in libguile: * gc.c (SCM_HEAP_SEG_SIZE, CELL_UP, CELL_DN, NEXT_DATA_CELL, init_heap_seg, alloc_some_heap), gc.h (struct scm_cell, struct scm_t_cell, SCM_CELLPTR, SCM_GC_CARD_SIZE, SCM_GC_IN_CARD_HEADERP), tags.h (SCM_CELLP): Renamed the struct scm_cell and all its uses to scm_t_cell in accordance to Guile's naming scheme for types. * alist.c (scm_acons), convert.i.c (CTYPES2UVECT, CTYPES2UVECT_OPTIONAL), coop-threads.c (scm_call_with_new_thread, scm_spawn_thread), debug.c (scm_make_debugobj), environments.c (scm_make_environment), eval.c (scm_closure), fports.c (scm_fdes_to_port), gc.c (scm_deprecated_newcell, scm_deprecated_newcell2), inline.h (scm_alloc_cell, scm_cell), list.c (SCM_I_CONS), numbers.c (scm_i_mkbig), pairs.c (scm_cons), ports.c (scm_void_port), procs.c (scm_c_make_subr, scm_makcclo), smob.c (scm_make_smob), smob.h (SCM_NEWSMOB), strings.c (scm_take_str, scm_allocate_string), strports.c (scm_mkstrport), unif.c (scm_make_uve), variable.c (make_variable), vectors.c (scm_c_make_vector), vports.c (scm_make_soft_port): Renamed scm_alloc_cell to scm_cell. * environments.c (core_environments_observe), gc.c (scm_deprecated_newcell2), goops.c (wrap_init, scm_wrap_object), inline.h (scm_alloc_double_cell, scm_double_cell), num2float.i.c (FLOAT2NUM), numbers.c (scm_make_real), procs.c (scm_make_procedure_with_setter), smob.h (SCM_NEWSMOB2, SCM_NEWSMOB3), struct.c (scm_make_struct, scm_make_vtable_vtable), symbols.c (scm_mem2symbol, scm_mem2uninterned_symbol), weaks.c (allocate_weak_vector): Renamed scm_alloc_double_cell to scm_double_cell.
162 lines
4.9 KiB
C
162 lines
4.9 KiB
C
/* classes: h_files */
|
|
|
|
#ifndef SCM_INLINE_H
|
|
#define SCM_INLINE_H
|
|
|
|
/* Copyright (C) 2001 Free Software Foundation, Inc.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2, or (at your option)
|
|
* any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this software; see the file COPYING. If not, write to
|
|
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
|
* Boston, MA 02111-1307 USA
|
|
*
|
|
* As a special exception, the Free Software Foundation gives permission
|
|
* for additional uses of the text contained in its release of GUILE.
|
|
*
|
|
* The exception is that, if you link the GUILE library with other files
|
|
* to produce an executable, this does not by itself cause the
|
|
* resulting executable to be covered by the GNU General Public License.
|
|
* Your use of that executable is in no way restricted on account of
|
|
* linking the GUILE library code into it.
|
|
*
|
|
* This exception does not however invalidate any other reasons why
|
|
* the executable file might be covered by the GNU General Public License.
|
|
*
|
|
* This exception applies only to the code released by the
|
|
* Free Software Foundation under the name GUILE. If you copy
|
|
* code from other Free Software Foundation releases into a copy of
|
|
* GUILE, as the General Public License permits, the exception does
|
|
* not apply to the code that you add in this way. To avoid misleading
|
|
* anyone as to the status of such modified files, you must delete
|
|
* this exception notice from them.
|
|
*
|
|
* If you write modifications of your own for GUILE, it is your choice
|
|
* whether to permit this exception to apply to your modifications.
|
|
* If you do not wish that, delete this exception notice. */
|
|
|
|
/* This file is for inline functions. On platforms that don't support
|
|
inlining functions, they are turned into ordinary functions. See
|
|
"inline.c".
|
|
*/
|
|
|
|
#include "libguile/pairs.h"
|
|
#include "libguile/gc.h"
|
|
|
|
#ifdef HAVE_INLINE
|
|
|
|
static inline SCM
|
|
scm_cell (scm_t_bits car, scm_t_bits cdr)
|
|
{
|
|
SCM z;
|
|
|
|
#ifdef GUILE_DEBUG_FREELIST
|
|
scm_newcell_count++;
|
|
if (scm_debug_check_freelist)
|
|
{
|
|
scm_check_freelist (scm_freelist);
|
|
scm_gc();
|
|
}
|
|
#endif
|
|
|
|
if (SCM_NULLP (scm_freelist))
|
|
{
|
|
z = scm_gc_for_newcell (&scm_master_freelist, &scm_freelist);
|
|
}
|
|
else
|
|
{
|
|
z = scm_freelist;
|
|
scm_freelist = SCM_FREE_CELL_CDR (scm_freelist);
|
|
}
|
|
|
|
/* 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 for
|
|
cooperating threads, but it might be important when we get true
|
|
preemptive threads.
|
|
*/
|
|
SCM_GC_SET_CELL_WORD (z, 1, cdr);
|
|
SCM_GC_SET_CELL_WORD (z, 0, car);
|
|
|
|
#ifdef USE_THREADS
|
|
#ifndef USE_COOP_THREADS
|
|
/* When we are using non-cooperating threads, we might need to make
|
|
sure that the initial values for the slots are protected until
|
|
the cell is completely initialized.
|
|
*/
|
|
#error review me
|
|
scm_remember_upto_here_1 (SCM_PACK (cdr));
|
|
#endif
|
|
#endif
|
|
|
|
return z;
|
|
}
|
|
|
|
static inline SCM
|
|
scm_double_cell (scm_t_bits car, scm_t_bits cbr,
|
|
scm_t_bits ccr, scm_t_bits cdr)
|
|
{
|
|
SCM z;
|
|
|
|
#ifdef GUILE_DEBUG_FREELIST
|
|
scm_newcell2_count++;
|
|
if (scm_debug_check_freelist)
|
|
{
|
|
scm_check_freelist (scm_freelist2);
|
|
scm_gc();
|
|
}
|
|
#endif
|
|
|
|
if (SCM_NULLP (scm_freelist2))
|
|
{
|
|
z = scm_gc_for_newcell (&scm_master_freelist2, &scm_freelist2);
|
|
}
|
|
else
|
|
{
|
|
z = scm_freelist2;
|
|
scm_freelist2 = SCM_FREE_CELL_CDR (scm_freelist2);
|
|
}
|
|
|
|
/* 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 for
|
|
cooperating threads, but it might be important when we get true
|
|
preemptive threads.
|
|
*/
|
|
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);
|
|
|
|
#ifdef USE_THREADS
|
|
#ifndef USE_COOP_THREADS
|
|
/* When we are using non-cooperating threads, we might need to make
|
|
sure that the initial values for the slots are protected until
|
|
the cell is completely initialized.
|
|
*/
|
|
#error review me
|
|
scm_remember_upto_here_3 (SCM_PACK (cbr), SCM_PACK (ccr), SCM_PACK (cdr));
|
|
#endif
|
|
#endif
|
|
|
|
return z;
|
|
}
|
|
|
|
#else /* !HAVE_INLINE */
|
|
|
|
SCM_API SCM scm_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);
|
|
|
|
#endif
|
|
|
|
#endif
|