1996-07-25 22:56:11 +00:00
|
|
|
|
/* classes: h_files */
|
|
|
|
|
|
|
2001-05-27 22:00:03 +00:00
|
|
|
|
#ifndef SCM___SCM_H
|
|
|
|
|
|
#define SCM___SCM_H
|
* __scm.h (SCM_ASSERT, SCM_WTA_DISPATCH_0, SCM_WTA_DISPATCH_1,
SCM_WTA_DISPATCH_2, SCM_WTA_DISPATCH_n): Don't call scm_wta, call
scm_wrong_type_arg instead.
(SCM_WNA): Deprecated.
* error.[ch] (scm_wta): Deprecated.
* numbers.c (s_i_log): Minor comment fix.
* read.c (scm_lreadr), unif.c (scm_aind, scm_shap2ra,
scm_make_shared_array, scm_transpose_array, scm_enclose_array,
scm_array_in_bounds_p): Don't use SCM_ASSERT to check for
wrong-num-args or misc errors.
* unif.c (scm_make_shared_array, scm_transpose_array,
scm_enclose_array, scm_array_in_bounds_p, scm_array_set_x):
Validate the rest argument (note: this is only done when guile is
built with SCM_DEBUG_REST_ARGUMENT=1)
(scm_array_in_bounds_p, scm_uniform_vector_ref, scm_array_set_x):
Replace calls to scm_wrong_num_args by SCM_WRONG_NUM_ARGS.
* validate.h (SCM_FUNC_NAME, SCM_VALIDATE_NUMBER_COPY,
SCM_VALIDATE_NUMBER_DEF_COPY): Deprecated.
2001-03-17 13:34:21 +00:00
|
|
|
|
/* Copyright (C) 1995,1996,1998,1999,2000,2001 Free Software Foundation, Inc.
|
1996-07-25 22:56:11 +00:00
|
|
|
|
*
|
|
|
|
|
|
* 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
|
1997-05-26 22:34:48 +00:00
|
|
|
|
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
|
|
|
|
|
* Boston, MA 02111-1307 USA
|
1996-07-25 22:56:11 +00:00
|
|
|
|
*
|
|
|
|
|
|
* 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.
|
1997-05-26 22:34:48 +00:00
|
|
|
|
* If you do not wish that, delete this exception notice. */
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
2000-03-16 21:11:45 +00:00
|
|
|
|
|
|
|
|
|
|
/* "What's the difference between _scm.h and __scm.h?"
|
|
|
|
|
|
|
|
|
|
|
|
_scm.h is not installed; it's only visible to the libguile sources
|
|
|
|
|
|
themselves.
|
|
|
|
|
|
|
|
|
|
|
|
__scm.h is installed, and is #included by <libguile.h>. If both
|
|
|
|
|
|
the client and libguile need some piece of information, and it
|
|
|
|
|
|
doesn't fit well into the header file for any particular module, it
|
|
|
|
|
|
should go in __scm.h. */
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-06-07 21:12:19 +00:00
|
|
|
|
/* {Compiler hints}
|
|
|
|
|
|
*
|
|
|
|
|
|
* The following macros are used to provide additional information for the
|
|
|
|
|
|
* compiler, which may help to do better error checking and code
|
|
|
|
|
|
* optimization. A second benefit of these macros is, that they also provide
|
|
|
|
|
|
* additional information to the developers.
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/* The macro SCM_NORETURN indicates that a function will never return.
|
|
|
|
|
|
* Examples:
|
|
|
|
|
|
* 1) int foo (char arg) SCM_NORETURN;
|
|
|
|
|
|
*/
|
|
|
|
|
|
#ifdef __GNUC__
|
|
|
|
|
|
#define SCM_NORETURN __attribute__ ((noreturn))
|
|
|
|
|
|
#else
|
|
|
|
|
|
#define SCM_NORETURN
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
/* The macro SCM_UNUSED indicates that a function, function argument or
|
|
|
|
|
|
* variable may potentially be unused.
|
|
|
|
|
|
* Examples:
|
|
|
|
|
|
* 1) static int unused_function (char arg) SCM_UNUSED;
|
|
|
|
|
|
* 2) int foo (char unused_argument SCM_UNUSED);
|
|
|
|
|
|
* 3) int unused_variable SCM_UNUSED;
|
|
|
|
|
|
*/
|
|
|
|
|
|
#ifdef __GNUC__
|
|
|
|
|
|
#define SCM_UNUSED __attribute__ ((unused))
|
|
|
|
|
|
#else
|
|
|
|
|
|
#define SCM_UNUSED
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
1996-07-25 22:56:11 +00:00
|
|
|
|
/* {Supported Options}
|
|
|
|
|
|
*
|
|
|
|
|
|
* These may be defined or undefined.
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
2000-03-21 23:14:31 +00:00
|
|
|
|
/* Old async mechanism */
|
|
|
|
|
|
/* #define GUILE_OLD_ASYNC_CLICK */
|
|
|
|
|
|
|
2000-03-14 06:43:57 +00:00
|
|
|
|
/* #define GUILE_DEBUG_FREELIST */
|
* dynl.c, error.c, eval.c, feature.c, filesys.c, fports.c, list.c, load.c,
net_db.c, read.c, socket.c: Update error messages to use ~A for
%s, ~S for %S to work with new `simple-format' format and be
standardized better.
* print.h, print.c (scm_simple_format): Added `simple-format'
primitive. It's the old scm_display_error, with ARGS now a rest
parameter, and the destination first instead of last (and a couple
new capabilities inspired by `format' -- #t as destination means
current-output-port, #f means return the formatted text as a
string.
* gh.h, gh_data.c, ports.h, ports.c: Added some missing const specifications.
* backtrace.c (scm_display_error_message): Rewrote to use
scm_simple_format() procedure.
* __scm.h: Added commented-out #define of GUILE_DEBUG_FREELIST
2000-01-11 18:48:57 +00:00
|
|
|
|
|
* (__scm.h, alist.c, eval.c, feature.c, gsubr.c, numbers.c,
options.c): Rename RECKLESS -> SCM_RECKLESS, CAUTIOUS ->
SCM_CAUTIOUS; this way, 1) there's only one version of each flag
to define (we used to have both RECKLESS and SCM_RECKLESS), and 2)
if we want to use them in a header file some day, we can. (Thanks
to Michael Livshin.)
1998-10-14 07:32:13 +00:00
|
|
|
|
/* If the compile FLAG `SCM_CAUTIOUS' is #defined then the number of
|
1996-07-25 22:56:11 +00:00
|
|
|
|
* arguments is always checked for application of closures. If the
|
* (__scm.h, alist.c, eval.c, feature.c, gsubr.c, numbers.c,
options.c): Rename RECKLESS -> SCM_RECKLESS, CAUTIOUS ->
SCM_CAUTIOUS; this way, 1) there's only one version of each flag
to define (we used to have both RECKLESS and SCM_RECKLESS), and 2)
if we want to use them in a header file some day, we can. (Thanks
to Michael Livshin.)
1998-10-14 07:32:13 +00:00
|
|
|
|
* compile FLAG `SCM_RECKLESS' is #defined then they are not checked.
|
1996-07-25 22:56:11 +00:00
|
|
|
|
* Otherwise, number of argument checks for closures are made only when
|
|
|
|
|
|
* the function position (whose value is the closure) of a combination is
|
|
|
|
|
|
* not an ILOC or GLOC. When the function position of a combination is a
|
|
|
|
|
|
* symbol it will be checked only the first time it is evaluated because
|
|
|
|
|
|
* it will then be replaced with an ILOC or GLOC.
|
|
|
|
|
|
*/
|
* (__scm.h, alist.c, eval.c, feature.c, gsubr.c, numbers.c,
options.c): Rename RECKLESS -> SCM_RECKLESS, CAUTIOUS ->
SCM_CAUTIOUS; this way, 1) there's only one version of each flag
to define (we used to have both RECKLESS and SCM_RECKLESS), and 2)
if we want to use them in a header file some day, we can. (Thanks
to Michael Livshin.)
1998-10-14 07:32:13 +00:00
|
|
|
|
#undef SCM_RECKLESS
|
|
|
|
|
|
#define SCM_CAUTIOUS
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
|
|
|
|
|
/* After looking up a local for the first time, rewrite the
|
|
|
|
|
|
* code graph, caching its position.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define MEMOIZE_LOCALS
|
|
|
|
|
|
|
|
|
|
|
|
/* All the number support there is.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define BIGNUMS
|
|
|
|
|
|
|
2000-05-21 20:49:20 +00:00
|
|
|
|
/* GC should relinquish empty cons-pair arenas. */
|
|
|
|
|
|
/* cmm:FIXME look at this after done mangling the GC */
|
|
|
|
|
|
/* #define GC_FREE_SEGMENTS */
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
|
|
|
|
|
/* Provide a scheme-accessible count-down timer that
|
|
|
|
|
|
* generates a pseudo-interrupt.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define TICKS
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Use engineering notation when converting numbers strings?
|
|
|
|
|
|
*/
|
|
|
|
|
|
#undef ENGNOT
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* {Unsupported Options}
|
|
|
|
|
|
*
|
1996-10-03 05:02:36 +00:00
|
|
|
|
* These must be defined as given here.
|
1996-07-25 22:56:11 +00:00
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define CCLO
|
1996-10-03 05:02:36 +00:00
|
|
|
|
|
|
|
|
|
|
/* Guile Scheme supports the #f/() distinction; Guile Lisp won't. We
|
|
|
|
|
|
have horrible plans for their unification. */
|
|
|
|
|
|
#undef SICP
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1996-08-23 01:18:28 +00:00
|
|
|
|
/* Random options (not yet supported or in final form). */
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
1996-08-23 01:18:28 +00:00
|
|
|
|
#define STACK_CHECKING
|
|
|
|
|
|
#undef NO_CEVAL_STACK_CHECKING
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
2000-02-08 22:16:15 +00:00
|
|
|
|
|
2000-05-11 16:03:32 +00:00
|
|
|
|
|
2000-02-08 22:16:15 +00:00
|
|
|
|
/* What did the configure script discover about the outside world? */
|
|
|
|
|
|
#include "libguile/scmconfig.h"
|
|
|
|
|
|
|
2000-05-11 16:03:32 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* {Debugging Options}
|
|
|
|
|
|
*
|
|
|
|
|
|
* These compile time options determine whether to include code that is only
|
|
|
|
|
|
* useful for debugging guile itself or C level extensions to guile. The
|
|
|
|
|
|
* common prefix for all option macros of this kind is "SCM_DEBUG_". It is
|
|
|
|
|
|
* guaranteed that a macro named SCM_DEBUG_XXX is defined to be either 0 or 1,
|
|
|
|
|
|
* i. e. there is no need to test for the undefined case. This allows to use
|
|
|
|
|
|
* these definitions comfortably in macro code, as in the following example:
|
|
|
|
|
|
* #define FOO do { if (SCM_DEBUG_XXX) bar(); else baz(); } while (0)
|
|
|
|
|
|
* Any sane compiler will remove the unused branch without any performance
|
|
|
|
|
|
* penalty for the resulting code.
|
|
|
|
|
|
*
|
|
|
|
|
|
* Note: Some SCM_DEBUG_XXX options are not settable at configure time.
|
|
|
|
|
|
* To change the value of such options you will have to edit this header
|
2000-05-16 12:11:08 +00:00
|
|
|
|
* file or give suitable options to make, like:
|
|
|
|
|
|
* make all CFLAGS="-DSCM_DEBUG_XXX=1 ..."
|
2000-05-11 16:03:32 +00:00
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
2000-05-17 08:35:30 +00:00
|
|
|
|
/* The value of SCM_DEBUG determines the default for most of the not yet
|
|
|
|
|
|
* defined debugging options. This allows, for example, to enable most of the
|
|
|
|
|
|
* debugging options by simply defining SCM_DEBUG as 1.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#ifndef SCM_DEBUG
|
|
|
|
|
|
#define SCM_DEBUG 0
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
2000-05-19 15:46:32 +00:00
|
|
|
|
/* If SCM_DEBUG_CELL_ACCESSES is set to 1, cell accesses will perform
|
|
|
|
|
|
* exhaustive parameter checking: It will be verified that cell parameters
|
|
|
|
|
|
* actually point to a valid heap cell. Note: If this option is enabled,
|
|
|
|
|
|
* guile will run about ten times slower than normally.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#ifndef SCM_DEBUG_CELL_ACCESSES
|
|
|
|
|
|
#define SCM_DEBUG_CELL_ACCESSES SCM_DEBUG
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
2000-05-11 16:03:32 +00:00
|
|
|
|
/* If SCM_DEBUG_DEPRECATED is set to 1, deprecated code is not compiled. This
|
|
|
|
|
|
* can be used by developers to get rid of references to deprecated code.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#ifndef SCM_DEBUG_DEPRECATED
|
2000-05-17 08:35:30 +00:00
|
|
|
|
#define SCM_DEBUG_DEPRECATED SCM_DEBUG
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
2001-04-17 09:15:39 +00:00
|
|
|
|
/* If SCM_DEBUG_INTERRUPTS is set to 1, with every deferring and allowing of
|
|
|
|
|
|
* interrupts a consistency check will be performed.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#ifndef SCM_DEBUG_INTERRUPTS
|
|
|
|
|
|
#define SCM_DEBUG_INTERRUPTS SCM_DEBUG
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
2001-06-07 21:12:19 +00:00
|
|
|
|
/* If SCM_DEBUG_PAIR_ACCESSES is set to 1, accesses to cons cells will be
|
|
|
|
|
|
* exhaustively checked. Note: If this option is enabled, guile will run
|
|
|
|
|
|
* slower than normally.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#ifndef SCM_DEBUG_PAIR_ACCESSES
|
|
|
|
|
|
#define SCM_DEBUG_PAIR_ACCESSES SCM_DEBUG
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
2000-05-18 08:47:52 +00:00
|
|
|
|
/* If SCM_DEBUG_REST_ARGUMENT is set to 1, functions that take rest arguments
|
|
|
|
|
|
* will check whether the rest arguments are actually passed as a proper list.
|
|
|
|
|
|
* Otherwise, if SCM_DEBUG_REST_ARGUMENT is 0, functions that take rest
|
|
|
|
|
|
* arguments will take it for granted that these are passed as a proper list.
|
2000-05-17 08:35:30 +00:00
|
|
|
|
*/
|
2000-05-18 08:47:52 +00:00
|
|
|
|
#ifndef SCM_DEBUG_REST_ARGUMENT
|
|
|
|
|
|
#define SCM_DEBUG_REST_ARGUMENT SCM_DEBUG
|
2000-05-11 16:03:32 +00:00
|
|
|
|
#endif
|
|
|
|
|
|
|
2000-05-16 12:11:08 +00:00
|
|
|
|
/* Use this for _compile time_ type checking only, since the compiled result
|
|
|
|
|
|
* will be quite inefficient. The right way to make use of this option is to
|
|
|
|
|
|
* do a 'make clean; make CFLAGS=-DSCM_DEBUG_TYPING_STRICTNESS=1', fix your
|
|
|
|
|
|
* errors, and then do 'make clean; make'.
|
2000-05-17 08:35:30 +00:00
|
|
|
|
*/
|
2000-05-16 12:11:08 +00:00
|
|
|
|
#ifndef SCM_DEBUG_TYPING_STRICTNESS
|
2001-05-27 22:00:03 +00:00
|
|
|
|
#define SCM_DEBUG_TYPING_STRICTNESS 1
|
2000-05-16 12:11:08 +00:00
|
|
|
|
#endif
|
|
|
|
|
|
|
2001-05-15 14:57:22 +00:00
|
|
|
|
/* If SCM_ENABLE_VCELLS is set to 1, a couple of functions that deal
|
|
|
|
|
|
* with vcells are defined for compatability reasons. Supporting
|
|
|
|
|
|
* vcells reduces performance however.
|
|
|
|
|
|
*
|
|
|
|
|
|
* We use a dedicated macro instead of just SCM_DEBUG_DEPRECATED so
|
|
|
|
|
|
* that code the belongs to the `vcell' feature is easier to find.
|
|
|
|
|
|
*/
|
|
|
|
|
|
#define SCM_ENABLE_VCELLS !SCM_DEBUG_DEPRECATED
|
|
|
|
|
|
|
2000-05-11 16:03:32 +00:00
|
|
|
|
|
|
|
|
|
|
|
2000-02-08 22:16:15 +00:00
|
|
|
|
#ifdef HAVE_LONG_LONGS
|
|
|
|
|
|
|
1996-07-25 22:56:11 +00:00
|
|
|
|
/* Some auto-generated .h files contain unused prototypes
|
|
|
|
|
|
* that need these typedefs.
|
|
|
|
|
|
*/
|
* validate.h
(SCM_NUM2{SIZE,PTRDIFF,SHORT,USHORT,BITS,UBITS,INT,UINT}[_DEF]):
new macros.
* unif.h: type renaming:
scm_array -> scm_array_t
scm_array_dim -> scm_array_dim_t
the old names are deprecated, all in-Guile uses changed.
* tags.h (scm_ubits_t): new typedef, representing unsigned
scm_bits_t.
* stacks.h: type renaming:
scm_info_frame -> scm_info_frame_t
scm_stack -> scm_stack_t
the old names are deprecated, all in-Guile uses changed.
* srcprop.h: type renaming:
scm_srcprops -> scm_srcprops_t
scm_srcprops_chunk -> scm_srcprops_chunk_t
the old names are deprecated, all in-Guile uses changed.
* gsubr.c, procs.c, print.c, ports.c, read.c, rdelim.c, ramap.c,
rw.c, smob.c, sort.c, srcprop.c, stacks.c, strings.c, strop.c,
strorder.c, strports.c, struct.c, symbols.c, unif.c, values.c,
vectors.c, vports.c, weaks.c:
various int/size_t -> size_t/scm_bits_t changes.
* random.h: type renaming:
scm_rstate -> scm_rstate_t
scm_rng -> scm_rng_t
scm_i_rstate -> scm_i_rstate_t
the old names are deprecated, all in-Guile uses changed.
* procs.h: type renaming:
scm_subr_entry -> scm_subr_entry_t
the old name is deprecated, all in-Guile uses changed.
* options.h (scm_option_t.val): unsigned long -> scm_bits_t.
type renaming:
scm_option -> scm_option_t
the old name is deprecated, all in-Guile uses changed.
* objects.c: various long -> scm_bits_t changes.
(scm_i_make_class_object): flags: unsigned long -> scm_ubits_t
* numbers.h (SCM_FIXNUM_BIT): deprecated, renamed to
SCM_I_FIXNUM_BIT.
* num2integral.i.c: new file, multiply included by numbers.c, used
to "templatize" the various integral <-> num conversion routines.
* numbers.c (scm_mkbig, scm_big2num, scm_adjbig, scm_normbig,
scm_copybig, scm_2ulong2big, scm_dbl2big, scm_big2dbl):
deprecated.
(scm_i_mkbig, scm_i_big2inum, scm_i_adjbig, scm_i_normbig,
scm_i_copybig, scm_i_short2big, scm_i_ushort2big, scm_i_int2big,
scm_i_uint2big, scm_i_long2big, scm_i_ulong2big, scm_i_bits2big,
scm_i_ubits2big, scm_i_size2big, scm_i_ptrdiff2big,
scm_i_long_long2big, scm_i_ulong_long2big, scm_i_dbl2big,
scm_i_big2dbl, scm_short2num, scm_ushort2num, scm_int2num,
scm_uint2num, scm_bits2num, scm_ubits2num, scm_size2num,
scm_ptrdiff2num, scm_num2short, scm_num2ushort, scm_num2int,
scm_num2uint, scm_num2bits, scm_num2ubits, scm_num2ptrdiff,
scm_num2size): new functions.
* modules.c (scm_module_reverse_lookup): i, n: int -> scm_bits_t.x
* load.c: change int -> size_t in various places (where the
variable is used to store a string length).
(search-path): call scm_done_free, not scm_done_malloc.
* list.c (scm_ilength): return a scm_bits_t, not long.
some other {int,long} -> scm_bits_t changes.
* hashtab.c: various [u]int -> scm_bits_t changes.
scm_ihashx_closure -> scm_ihashx_closure_t (and made a typedef).
(scm_ihashx): n: uint -> scm_bits_t
use scm_bits2num instead of scm_ulong2num.
* gsubr.c: various int -> scm_bits_t changes.
* gh_data.c (gh_scm2double): no loss of precision any more.
* gh.h (gh_str2scm): len: int -> size_t
(gh_{get,set}_substr): start: int -> scm_bits_t,
len: int -> size_t
(gh_<num>2scm): n: int -> scm_bits_t
(gh_*vector_length): return scm_[u]size_t, not unsigned long.
(gh_length): return scm_bits_t, not unsigned long.
* fports.h: type renaming:
scm_fport -> scm_fport_t
the old name is deprecated, all in-Guile uses changed.
* fports.c (fport_fill_input): count: int -> scm_bits_t
(fport_flush): init_size, remaining, count: int -> scm_bits_t
* debug.h (scm_lookup_cstr, scm_lookup_soft, scm_evstr): removed
those prototypes, as the functions they prototype don't exist.
* fports.c (default_buffer_size): int -> size_t
(scm_fport_buffer_add): read_size, write_size: int -> scm_bits_t
default_size: int -> size_t
(scm_setvbuf): csize: int -> scm_bits_t
* fluids.c (n_fluids): int -> scm_bits_t
(grow_fluids): old_length, i: int -> scm_bits_t
(next_fluid_num, scm_fluid_ref, scm_fluid_set_x): n: int ->
scm_bits_t
(scm_c_with_fluids): flen, vlen: int -> scm_bits_t
* filesys.c (s_scm_open_fdes): changed calls to SCM_NUM2LONG to
the new and shiny SCM_NUM2INT.
* extensions.c: extension -> extension_t (and made a typedef).
* eval.h (SCM_IFRAME): cast to scm_bits_t, not int. just so
there are no nasty surprises if/when the various deeply magic tag
bits move somewhere else.
* eval.c: changed the locals used to store results of SCM_IFRAME,
scm_ilength and such to be of type scm_bits_t (and not int/long).
(iqq): depth, edepth: int -> scm_bits_t
(scm_eval_stack): int -> scm_bits_t
(SCM_CEVAL): various vars are not scm_bits_t instead of int.
(check_map_args, scm_map, scm_for_each): len: long -> scm_bits_t
i: int -> scm_bits_t
* environments.c: changed the many calls to scm_ulong2num to
scm_ubits2num.
(import_environment_fold): proc_as_ul: ulong -> scm_ubits_t
* dynwind.c (scm_dowinds): delta: long -> scm_bits_t
* debug.h: type renaming:
scm_debug_info -> scm_debug_info_t
scm_debug_frame -> scm_debug_frame_t
the old names are deprecated, all in-Guile uses changed.
(scm_debug_eframe_size): int -> scm_bits_t
* debug.c (scm_init_debug): use scm_c_define instead of the
deprecated scm_define.
* continuations.h: type renaming:
scm_contregs -> scm_contregs_t
the old name is deprecated, all in-Guile uses changed.
(scm_contregs_t.num_stack_items): size_t -> scm_bits_t
(scm_contregs_t.num_stack_items): ulong -> scm_ubits_t
* continuations.c (scm_make_continuation): change the type of
stack_size form long to scm_bits_t.
* ports.h: type renaming:
scm_port_rw_active -> scm_port_rw_active_t (and made a typedef)
scm_port -> scm_port_t
scm_ptob_descriptor -> scm_ptob_descriptor_t
the old names are deprecated, all in-Guile uses changed.
(scm_port_t.entry): int -> scm_bits_t.
(scm_port_t.line_number): int -> long.
(scm_port_t.putback_buf_size): int -> size_t.
* __scm.h (long_long, ulong_long): deprecated (they pollute the
global namespace and have little value besides that).
(SCM_BITS_LENGTH): new, is the bit size of scm_bits_t (i.e. of an
SCM handle).
(ifdef spaghetti): include sys/types.h and sys/stdtypes.h, if they
exist (for size_t & ptrdiff_t)
(scm_sizet): deprecated.
* Makefile.am (noinst_HEADERS): add num2integral.i.c
2001-05-24 00:50:51 +00:00
|
|
|
|
|
|
|
|
|
|
#if (SCM_DEBUG_DEPRECATED == 0)
|
* acconfig.h: add HAVE_ARRAYS.
* configure.in: add --disable-arrays option, probably temporary.
* the following changes allow guile to be built with the array
"module" omitted. some of this stuff is just tc7 type support,
which wouldn't be needed if uniform array types were converted
to smobs.
* tag.c (scm_utag_bvect ... scm_utag_cvect): don't define unless
HAVE_ARRAYS.
(scm_tag): don't check array types unless HAVE_ARRAYS.
* sort.c (scm_restricted_vector_sort_x, scm_sorted_p):
remove the unused array types.
* (scm_stable_sort, scm_sort): don't support vectors if not
HAVE_ARRAYS. a bit excessive.
* random.c (vector_scale, vector_sum_squares,
scm_random_solid_sphere_x, scm_random_hollow_sphere_x,
scm_random_normal_vector_x): don't define unless HAVE_ARRAYS.
* gh_data.c (makvect, gh_chars2byvect, gh_shorts2svect,
gh_longs2ivect, gh_ulongs2uvect, gh_floats2fvect, gh_doubles2dvect,
gh_uniform_vector_length, gh_uniform_vector_ref):
don't define unless HAVE_ARRAYS.
(gh_scm2chars, gh_scm2shorts, gh_scm2longs, gh_scm2floats,
gh_scm2doubles):
don't check vector types if not HAVE_ARRAYS.
* eq.c (scm_equal_p), eval.c (SCM_CEVAL), print.c (scm_iprin1),
gc.c (scm_gc_mark, scm_gc_sweep), objects.c (scm_class_of):
don't support the array types unless HAVE_ARRAYS is defined.
* tags.h: make nine tc7 types conditional on HAVE_ARRAYS.
* read.c (scm_lreadr): don't check for #* unless HAVE_ARRAYS is
defined (this should use read-hash-extend).
* ramap.c, unif.c: don't check whether ARRAYS is defined.
* vectors.c (scm_vector_set_length_x): moved here from unif.c. call
scm_uniform_element_size if HAVE_ARRAYS.
vectors.h: prototype too.
* unif.c (scm_uniform_element_size): new procedure.
* init.c (scm_boot_guile_1): don't call scm_init_ramap or
scm_init_unif unless HAVE_ARRAYS is defined.
* __scm.h: don't define ARRAYS.
* Makefile.am (EXTRA_libguile_la_SOURCES): unif.c and ramap.c
moved here from libguile_la_SOURCES.
* Makefile.am (ice9_sources): add arrays.scm.
* boot-9.scm: load arrays.scm if 'array is provided.
* arrays.scm: new file with stuff from boot-9.scm.
1999-11-19 18:16:19 +00:00
|
|
|
|
typedef long long long_long;
|
|
|
|
|
|
typedef unsigned long long ulong_long;
|
* validate.h
(SCM_NUM2{SIZE,PTRDIFF,SHORT,USHORT,BITS,UBITS,INT,UINT}[_DEF]):
new macros.
* unif.h: type renaming:
scm_array -> scm_array_t
scm_array_dim -> scm_array_dim_t
the old names are deprecated, all in-Guile uses changed.
* tags.h (scm_ubits_t): new typedef, representing unsigned
scm_bits_t.
* stacks.h: type renaming:
scm_info_frame -> scm_info_frame_t
scm_stack -> scm_stack_t
the old names are deprecated, all in-Guile uses changed.
* srcprop.h: type renaming:
scm_srcprops -> scm_srcprops_t
scm_srcprops_chunk -> scm_srcprops_chunk_t
the old names are deprecated, all in-Guile uses changed.
* gsubr.c, procs.c, print.c, ports.c, read.c, rdelim.c, ramap.c,
rw.c, smob.c, sort.c, srcprop.c, stacks.c, strings.c, strop.c,
strorder.c, strports.c, struct.c, symbols.c, unif.c, values.c,
vectors.c, vports.c, weaks.c:
various int/size_t -> size_t/scm_bits_t changes.
* random.h: type renaming:
scm_rstate -> scm_rstate_t
scm_rng -> scm_rng_t
scm_i_rstate -> scm_i_rstate_t
the old names are deprecated, all in-Guile uses changed.
* procs.h: type renaming:
scm_subr_entry -> scm_subr_entry_t
the old name is deprecated, all in-Guile uses changed.
* options.h (scm_option_t.val): unsigned long -> scm_bits_t.
type renaming:
scm_option -> scm_option_t
the old name is deprecated, all in-Guile uses changed.
* objects.c: various long -> scm_bits_t changes.
(scm_i_make_class_object): flags: unsigned long -> scm_ubits_t
* numbers.h (SCM_FIXNUM_BIT): deprecated, renamed to
SCM_I_FIXNUM_BIT.
* num2integral.i.c: new file, multiply included by numbers.c, used
to "templatize" the various integral <-> num conversion routines.
* numbers.c (scm_mkbig, scm_big2num, scm_adjbig, scm_normbig,
scm_copybig, scm_2ulong2big, scm_dbl2big, scm_big2dbl):
deprecated.
(scm_i_mkbig, scm_i_big2inum, scm_i_adjbig, scm_i_normbig,
scm_i_copybig, scm_i_short2big, scm_i_ushort2big, scm_i_int2big,
scm_i_uint2big, scm_i_long2big, scm_i_ulong2big, scm_i_bits2big,
scm_i_ubits2big, scm_i_size2big, scm_i_ptrdiff2big,
scm_i_long_long2big, scm_i_ulong_long2big, scm_i_dbl2big,
scm_i_big2dbl, scm_short2num, scm_ushort2num, scm_int2num,
scm_uint2num, scm_bits2num, scm_ubits2num, scm_size2num,
scm_ptrdiff2num, scm_num2short, scm_num2ushort, scm_num2int,
scm_num2uint, scm_num2bits, scm_num2ubits, scm_num2ptrdiff,
scm_num2size): new functions.
* modules.c (scm_module_reverse_lookup): i, n: int -> scm_bits_t.x
* load.c: change int -> size_t in various places (where the
variable is used to store a string length).
(search-path): call scm_done_free, not scm_done_malloc.
* list.c (scm_ilength): return a scm_bits_t, not long.
some other {int,long} -> scm_bits_t changes.
* hashtab.c: various [u]int -> scm_bits_t changes.
scm_ihashx_closure -> scm_ihashx_closure_t (and made a typedef).
(scm_ihashx): n: uint -> scm_bits_t
use scm_bits2num instead of scm_ulong2num.
* gsubr.c: various int -> scm_bits_t changes.
* gh_data.c (gh_scm2double): no loss of precision any more.
* gh.h (gh_str2scm): len: int -> size_t
(gh_{get,set}_substr): start: int -> scm_bits_t,
len: int -> size_t
(gh_<num>2scm): n: int -> scm_bits_t
(gh_*vector_length): return scm_[u]size_t, not unsigned long.
(gh_length): return scm_bits_t, not unsigned long.
* fports.h: type renaming:
scm_fport -> scm_fport_t
the old name is deprecated, all in-Guile uses changed.
* fports.c (fport_fill_input): count: int -> scm_bits_t
(fport_flush): init_size, remaining, count: int -> scm_bits_t
* debug.h (scm_lookup_cstr, scm_lookup_soft, scm_evstr): removed
those prototypes, as the functions they prototype don't exist.
* fports.c (default_buffer_size): int -> size_t
(scm_fport_buffer_add): read_size, write_size: int -> scm_bits_t
default_size: int -> size_t
(scm_setvbuf): csize: int -> scm_bits_t
* fluids.c (n_fluids): int -> scm_bits_t
(grow_fluids): old_length, i: int -> scm_bits_t
(next_fluid_num, scm_fluid_ref, scm_fluid_set_x): n: int ->
scm_bits_t
(scm_c_with_fluids): flen, vlen: int -> scm_bits_t
* filesys.c (s_scm_open_fdes): changed calls to SCM_NUM2LONG to
the new and shiny SCM_NUM2INT.
* extensions.c: extension -> extension_t (and made a typedef).
* eval.h (SCM_IFRAME): cast to scm_bits_t, not int. just so
there are no nasty surprises if/when the various deeply magic tag
bits move somewhere else.
* eval.c: changed the locals used to store results of SCM_IFRAME,
scm_ilength and such to be of type scm_bits_t (and not int/long).
(iqq): depth, edepth: int -> scm_bits_t
(scm_eval_stack): int -> scm_bits_t
(SCM_CEVAL): various vars are not scm_bits_t instead of int.
(check_map_args, scm_map, scm_for_each): len: long -> scm_bits_t
i: int -> scm_bits_t
* environments.c: changed the many calls to scm_ulong2num to
scm_ubits2num.
(import_environment_fold): proc_as_ul: ulong -> scm_ubits_t
* dynwind.c (scm_dowinds): delta: long -> scm_bits_t
* debug.h: type renaming:
scm_debug_info -> scm_debug_info_t
scm_debug_frame -> scm_debug_frame_t
the old names are deprecated, all in-Guile uses changed.
(scm_debug_eframe_size): int -> scm_bits_t
* debug.c (scm_init_debug): use scm_c_define instead of the
deprecated scm_define.
* continuations.h: type renaming:
scm_contregs -> scm_contregs_t
the old name is deprecated, all in-Guile uses changed.
(scm_contregs_t.num_stack_items): size_t -> scm_bits_t
(scm_contregs_t.num_stack_items): ulong -> scm_ubits_t
* continuations.c (scm_make_continuation): change the type of
stack_size form long to scm_bits_t.
* ports.h: type renaming:
scm_port_rw_active -> scm_port_rw_active_t (and made a typedef)
scm_port -> scm_port_t
scm_ptob_descriptor -> scm_ptob_descriptor_t
the old names are deprecated, all in-Guile uses changed.
(scm_port_t.entry): int -> scm_bits_t.
(scm_port_t.line_number): int -> long.
(scm_port_t.putback_buf_size): int -> size_t.
* __scm.h (long_long, ulong_long): deprecated (they pollute the
global namespace and have little value besides that).
(SCM_BITS_LENGTH): new, is the bit size of scm_bits_t (i.e. of an
SCM handle).
(ifdef spaghetti): include sys/types.h and sys/stdtypes.h, if they
exist (for size_t & ptrdiff_t)
(scm_sizet): deprecated.
* Makefile.am (noinst_HEADERS): add num2integral.i.c
2001-05-24 00:50:51 +00:00
|
|
|
|
#endif
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
2000-02-08 22:16:15 +00:00
|
|
|
|
#endif /* HAVE_LONG_LONGS */
|
1996-08-15 07:17:00 +00:00
|
|
|
|
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
2001-01-18 13:35:45 +00:00
|
|
|
|
/* {Architecture and compiler properties}
|
1996-07-25 22:56:11 +00:00
|
|
|
|
*
|
2001-01-18 13:35:45 +00:00
|
|
|
|
* Guile as of today can only work on systems which fulfill at least the
|
|
|
|
|
|
* following requirements:
|
|
|
|
|
|
* - long ints have at least 32 bits.
|
|
|
|
|
|
* Guile's type system is based on this assumption.
|
|
|
|
|
|
* - long ints consist of at least four characters.
|
|
|
|
|
|
* It is assumed that cells, i. e. pairs of long ints, are eight character
|
|
|
|
|
|
* aligned, because three bits of a cell pointer are used for type data.
|
|
|
|
|
|
* - sizeof (void*) == sizeof (long int)
|
|
|
|
|
|
* Pointers are stored in SCM objects, and sometimes SCM objects are passed
|
|
|
|
|
|
* as void*. Thus, there has to be a one-to-one correspondence.
|
|
|
|
|
|
* - numbers are encoded using two's complement.
|
|
|
|
|
|
* The implementation of the bitwise scheme level operations is based on
|
|
|
|
|
|
* this assumption.
|
|
|
|
|
|
* - ... add more
|
1996-07-25 22:56:11 +00:00
|
|
|
|
*/
|
|
|
|
|
|
|
1996-08-15 07:17:00 +00:00
|
|
|
|
#ifdef HAVE_LIMITS_H
|
1996-07-25 22:56:11 +00:00
|
|
|
|
# include <limits.h>
|
2001-01-18 13:35:45 +00:00
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef CHAR_BIT
|
|
|
|
|
|
# define SCM_CHAR_BIT CHAR_BIT
|
|
|
|
|
|
#else
|
|
|
|
|
|
# define SCM_CHAR_BIT 8
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef LONG_BIT
|
|
|
|
|
|
# define SCM_LONG_BIT LONG_BIT
|
|
|
|
|
|
#else
|
|
|
|
|
|
# define SCM_LONG_BIT (SCM_CHAR_BIT * sizeof (long) / sizeof (char))
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef UCHAR_MAX
|
|
|
|
|
|
# define SCM_CHAR_CODE_LIMIT (UCHAR_MAX + 1L)
|
1996-07-25 22:56:11 +00:00
|
|
|
|
#else
|
* __scm.h, chars.c, debug.c, eval.c, eval.h, extchrs.c, extchrs.h,
fdsocket.c, feature.c, mbstrings.c, mbstrings.h, numbers.c,
numbers.h, print.c, scmhob.h, simpos.h, symbols.c, symbols.h,
tags.h, throw.c, variable.h: Name cleanup. Lots of xxxSCM_yyy
removed. (These were introduced by unsupervised name
substitution.)
1996-09-13 11:07:24 +00:00
|
|
|
|
# define SCM_CHAR_CODE_LIMIT 256L
|
2001-01-18 13:35:45 +00:00
|
|
|
|
#endif
|
|
|
|
|
|
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
* __scm.h: Doc fixes.
* __scm.h, libguile.h: Use "quotes" in the #includes, not
<angles>; this allows `make depends' to work properly.
C files should #include only the header files they need, not
libguile.h (which #includes all the header files); the pointless
recompilation was wasting my time.
* Makefile.in (all .o dependency lists): Regenerated.
* libguile.h: Don't try to get a definition for size_t here...
* __scm.h: Do it here.
* _scm.h: Since this is the internal libguile header, put things
here that all (or a majority) of the libguile files will want.
Don't #include <libguile.h> here; that generates dependencies on
way too much. Instead, get "__scm.h", "error.h", "pairs.h",
"list.h", "gc.h", "gsubr.h", "procs.h", "numbers.h", "symbols.h",
"boolean.h", "strings.h", "vectors.h", "root.h", "ports.h", and
"async.h".
* alist.c: Get "eq.h", "list.h", "alist.h".
* append.c: Get "append.h", "list.h".
* arbiters.c: Get "arbiters.h", "smob.h".
* async.c: Get "async.h", "smob.h", "throw.h", "eval.h".
* boolean.c: Get "boolean.h".
* chars.c: Get "chars.h".
* continuations.c: Get "continuations.h", "dynwind.h", "debug.h",
"stackchk.h".
* debug.c: Get "debug.h", "feature.h", "read.h", "strports.h",
"continuations.h", "alist.h", "srcprop.h", "procprop.h", "smob.h",
"genio.h", "throw.h", "eval.h".
* dynwind.c: Get "dynwind.h", "alist.h", "eval.h".
* eq.c: Get "eq.h", "unif.h", "smob.h", "strorder.h",
"stackchk.h".
* error.c: Get "error.h", "throw.h", "genio.h", "pairs.h".
* eval.c: Get "eval.h", "stackchk.h", "srcprop.h", "debug.h",
"hashtab.h", "procprop.h", "markers.h", "smob.h", "throw.h",
"continuations.h", "eq.h", "sequences.h", "alist.h", "append.h",
"debug.h".
* fdsocket.c: Get "fdsocket.h", "unif.h", "filesys.h".
* feature.c: Get "feature.h".
* files.c: Get "files.h".
* filesys.c: Get "filesys.h", "smob.h", "genio.h".
* fports.c: Get "fports.h", "markers.h".
* gc.c: Get "async.h", "unif.h", "smob.h", "weaks.h",
"genio.h", "struct.h", "stackchk.h", "stime.h".
* gdbint.c: Get "gdbint.h", "chars.h", "eval.h", "print.h",
"read.h", "strports.h", "tag.h".
* genio.c: Get "genio.h", "chars.h".
* gsubr.c: Get "gsubr.h", "genio.h".
* hash.c: Get "hash.h", "chars.h".
* hashtab.c: Get "hashtab.h", "eval.h", "hash.h", "alist.h".
* init.c: Get everyone who has an scm_init_mumble function:
"weaks.h", "vports.h", "version.h", "vectors.h", "variable.h",
"unif.h", "throw.h", "tag.h", "symbols.h", "struct.h",
"strports.h", "strorder.h", "strop.h", "strings.h", "stime.h",
"stackchk.h", "srcprop.h", "socket.h", "simpos.h", "sequences.h",
"scmsigs.h", "read.h", "ramap.h", "procs.h", "procprop.h",
"print.h", "posix.h", "ports.h", "pairs.h", "options.h",
"objprop.h", "numbers.h", "mbstrings.h", "mallocs.h", "load.h",
"list.h", "kw.h", "ioext.h", "hashtab.h", "hash.h", "gsubr.h",
"gdbint.h", "gc.h", "fports.h", "filesys.h", "files.h",
"feature.h", "fdsocket.h", "eval.h", "error.h", "eq.h",
"dynwind.h", "debug.h", "continuations.h", "chars.h", "boolean.h",
"async.h", "arbiters.h", "append.h", "alist.h".
* ioext.c: Get "ioext.h", "fports.h".
* kw.c: Get "kw.h", "smob.h", "mbstrings.h", "genio.h".
* list.c: Get "list.h", "eq.h".
* load.c: Get "load.h", "eval.h", "read.h", "fports.h".
* mallocs.c: Get "smob.h", "genio.h".
* markers.c: Get "markers.h".
* mbstrings.c: Get "mbstrings.h", "read.h", "genio.h", "unif.h",
"chars.h".
* numbers.c: Get "unif.h", "genio.h".
* objprop.c: Get "objprop.h", "weaks.h", "alist.h", "hashtab.h".
* options.c: Get "options.h".
* ports.c: Get "ports.h", "vports.h", "strports.h", "fports.h",
"markers.h", "chars.h", "genio.h".
* posix.c: Get "posix.h", "sequences.h", "feature.h", "unif.h",
"read.h", "scmsigs.h", "genio.h", "fports.h".
* print.c: Get "print.h", "unif.h", "weaks.h", "read.h",
"procprop.h", "eval.h", "smob.h", "mbstrings.h", "genio.h",
"chars.h".
* procprop.c: Get "procprop.h", "eval.h", "alist.h".
* procs.c: Get "procs.h".
* ramap.c: Get "ramap.h", "feature.h", "eval.h", "eq.h",
"chars.h", "smob.h", "unif.h".
* read.c: Get "alist.h", "kw.h", "mbstrings.h", "unif.h",
"eval.h", "genio.h", "chars.h".
* root.c: Get "root.h", "stackchk.h".
* scmsigs.c: Get "scmsigs.h".
* sequences.c: Get "sequences.h".
* simpos.c: Get "simpos.h", "scmsigs.h".
* smob.c: Get "smob.h".
* socket.c: Get "socket.h", "feature.h".
* srcprop.c: Get "srcprop.h", "weaks.h", "hashtab.h", "debug.h",
"alist.h", "smob.h".
* stackchk.c: Get "stackchk.h", "genio.h".
* stime.c: Get "stime.h"."libguile/continuations.h".
* strings.c: Get "strings.h", "chars.h".
* strop.c: Get "strop.h", "chars.h".
* strorder.c: Get "strorder.h", "chars.h".
* strports.c: Get "strports.h", "print.h", "eval.h", "unif.h".
* struct.c: Get "struct.h", "chars.h".
* symbols.c: Get "symbols.h", "mbstrings.h", "alist.h",
"variable.h", "eval.h", "chars.h".
* tag.c: Get "tag.h", "struct.h", "chars.h".
* throw.c: Get "throw.h", "continuations.h", "debug.h",
"dynwind.h", "eval.h", "alist.h", "smob.h", "genio.h".
* unif.c: Get "unif.h", "feature.h", "strop.h", "sequences.h",
"smob.h", "genio.h", "eval.h", "chars.h".
* variable.c: Get "variable.h", "smob.h", "genio.h".
* vectors.c: Get "vectors.h", "eq.h".
* version.c: Get "version.h".
* vports.c: Get "vports.h", "fports.h", "chars.h", "eval.h".
* weaks.c: Get "weaks.h".
1996-09-10 02:26:35 +00:00
|
|
|
|
#ifdef STDC_HEADERS
|
|
|
|
|
|
# include <stdlib.h>
|
* validate.h
(SCM_NUM2{SIZE,PTRDIFF,SHORT,USHORT,BITS,UBITS,INT,UINT}[_DEF]):
new macros.
* unif.h: type renaming:
scm_array -> scm_array_t
scm_array_dim -> scm_array_dim_t
the old names are deprecated, all in-Guile uses changed.
* tags.h (scm_ubits_t): new typedef, representing unsigned
scm_bits_t.
* stacks.h: type renaming:
scm_info_frame -> scm_info_frame_t
scm_stack -> scm_stack_t
the old names are deprecated, all in-Guile uses changed.
* srcprop.h: type renaming:
scm_srcprops -> scm_srcprops_t
scm_srcprops_chunk -> scm_srcprops_chunk_t
the old names are deprecated, all in-Guile uses changed.
* gsubr.c, procs.c, print.c, ports.c, read.c, rdelim.c, ramap.c,
rw.c, smob.c, sort.c, srcprop.c, stacks.c, strings.c, strop.c,
strorder.c, strports.c, struct.c, symbols.c, unif.c, values.c,
vectors.c, vports.c, weaks.c:
various int/size_t -> size_t/scm_bits_t changes.
* random.h: type renaming:
scm_rstate -> scm_rstate_t
scm_rng -> scm_rng_t
scm_i_rstate -> scm_i_rstate_t
the old names are deprecated, all in-Guile uses changed.
* procs.h: type renaming:
scm_subr_entry -> scm_subr_entry_t
the old name is deprecated, all in-Guile uses changed.
* options.h (scm_option_t.val): unsigned long -> scm_bits_t.
type renaming:
scm_option -> scm_option_t
the old name is deprecated, all in-Guile uses changed.
* objects.c: various long -> scm_bits_t changes.
(scm_i_make_class_object): flags: unsigned long -> scm_ubits_t
* numbers.h (SCM_FIXNUM_BIT): deprecated, renamed to
SCM_I_FIXNUM_BIT.
* num2integral.i.c: new file, multiply included by numbers.c, used
to "templatize" the various integral <-> num conversion routines.
* numbers.c (scm_mkbig, scm_big2num, scm_adjbig, scm_normbig,
scm_copybig, scm_2ulong2big, scm_dbl2big, scm_big2dbl):
deprecated.
(scm_i_mkbig, scm_i_big2inum, scm_i_adjbig, scm_i_normbig,
scm_i_copybig, scm_i_short2big, scm_i_ushort2big, scm_i_int2big,
scm_i_uint2big, scm_i_long2big, scm_i_ulong2big, scm_i_bits2big,
scm_i_ubits2big, scm_i_size2big, scm_i_ptrdiff2big,
scm_i_long_long2big, scm_i_ulong_long2big, scm_i_dbl2big,
scm_i_big2dbl, scm_short2num, scm_ushort2num, scm_int2num,
scm_uint2num, scm_bits2num, scm_ubits2num, scm_size2num,
scm_ptrdiff2num, scm_num2short, scm_num2ushort, scm_num2int,
scm_num2uint, scm_num2bits, scm_num2ubits, scm_num2ptrdiff,
scm_num2size): new functions.
* modules.c (scm_module_reverse_lookup): i, n: int -> scm_bits_t.x
* load.c: change int -> size_t in various places (where the
variable is used to store a string length).
(search-path): call scm_done_free, not scm_done_malloc.
* list.c (scm_ilength): return a scm_bits_t, not long.
some other {int,long} -> scm_bits_t changes.
* hashtab.c: various [u]int -> scm_bits_t changes.
scm_ihashx_closure -> scm_ihashx_closure_t (and made a typedef).
(scm_ihashx): n: uint -> scm_bits_t
use scm_bits2num instead of scm_ulong2num.
* gsubr.c: various int -> scm_bits_t changes.
* gh_data.c (gh_scm2double): no loss of precision any more.
* gh.h (gh_str2scm): len: int -> size_t
(gh_{get,set}_substr): start: int -> scm_bits_t,
len: int -> size_t
(gh_<num>2scm): n: int -> scm_bits_t
(gh_*vector_length): return scm_[u]size_t, not unsigned long.
(gh_length): return scm_bits_t, not unsigned long.
* fports.h: type renaming:
scm_fport -> scm_fport_t
the old name is deprecated, all in-Guile uses changed.
* fports.c (fport_fill_input): count: int -> scm_bits_t
(fport_flush): init_size, remaining, count: int -> scm_bits_t
* debug.h (scm_lookup_cstr, scm_lookup_soft, scm_evstr): removed
those prototypes, as the functions they prototype don't exist.
* fports.c (default_buffer_size): int -> size_t
(scm_fport_buffer_add): read_size, write_size: int -> scm_bits_t
default_size: int -> size_t
(scm_setvbuf): csize: int -> scm_bits_t
* fluids.c (n_fluids): int -> scm_bits_t
(grow_fluids): old_length, i: int -> scm_bits_t
(next_fluid_num, scm_fluid_ref, scm_fluid_set_x): n: int ->
scm_bits_t
(scm_c_with_fluids): flen, vlen: int -> scm_bits_t
* filesys.c (s_scm_open_fdes): changed calls to SCM_NUM2LONG to
the new and shiny SCM_NUM2INT.
* extensions.c: extension -> extension_t (and made a typedef).
* eval.h (SCM_IFRAME): cast to scm_bits_t, not int. just so
there are no nasty surprises if/when the various deeply magic tag
bits move somewhere else.
* eval.c: changed the locals used to store results of SCM_IFRAME,
scm_ilength and such to be of type scm_bits_t (and not int/long).
(iqq): depth, edepth: int -> scm_bits_t
(scm_eval_stack): int -> scm_bits_t
(SCM_CEVAL): various vars are not scm_bits_t instead of int.
(check_map_args, scm_map, scm_for_each): len: long -> scm_bits_t
i: int -> scm_bits_t
* environments.c: changed the many calls to scm_ulong2num to
scm_ubits2num.
(import_environment_fold): proc_as_ul: ulong -> scm_ubits_t
* dynwind.c (scm_dowinds): delta: long -> scm_bits_t
* debug.h: type renaming:
scm_debug_info -> scm_debug_info_t
scm_debug_frame -> scm_debug_frame_t
the old names are deprecated, all in-Guile uses changed.
(scm_debug_eframe_size): int -> scm_bits_t
* debug.c (scm_init_debug): use scm_c_define instead of the
deprecated scm_define.
* continuations.h: type renaming:
scm_contregs -> scm_contregs_t
the old name is deprecated, all in-Guile uses changed.
(scm_contregs_t.num_stack_items): size_t -> scm_bits_t
(scm_contregs_t.num_stack_items): ulong -> scm_ubits_t
* continuations.c (scm_make_continuation): change the type of
stack_size form long to scm_bits_t.
* ports.h: type renaming:
scm_port_rw_active -> scm_port_rw_active_t (and made a typedef)
scm_port -> scm_port_t
scm_ptob_descriptor -> scm_ptob_descriptor_t
the old names are deprecated, all in-Guile uses changed.
(scm_port_t.entry): int -> scm_bits_t.
(scm_port_t.line_number): int -> long.
(scm_port_t.putback_buf_size): int -> size_t.
* __scm.h (long_long, ulong_long): deprecated (they pollute the
global namespace and have little value besides that).
(SCM_BITS_LENGTH): new, is the bit size of scm_bits_t (i.e. of an
SCM handle).
(ifdef spaghetti): include sys/types.h and sys/stdtypes.h, if they
exist (for size_t & ptrdiff_t)
(scm_sizet): deprecated.
* Makefile.am (noinst_HEADERS): add num2integral.i.c
2001-05-24 00:50:51 +00:00
|
|
|
|
# if HAVE_SYS_TYPES_H
|
|
|
|
|
|
# include <sys/types.h>
|
|
|
|
|
|
# endif
|
|
|
|
|
|
# if HAVE_SYS_STDTYPES_H
|
|
|
|
|
|
# include <sys/stdtypes.h>
|
|
|
|
|
|
# endif
|
* __scm.h: Doc fixes.
* __scm.h, libguile.h: Use "quotes" in the #includes, not
<angles>; this allows `make depends' to work properly.
C files should #include only the header files they need, not
libguile.h (which #includes all the header files); the pointless
recompilation was wasting my time.
* Makefile.in (all .o dependency lists): Regenerated.
* libguile.h: Don't try to get a definition for size_t here...
* __scm.h: Do it here.
* _scm.h: Since this is the internal libguile header, put things
here that all (or a majority) of the libguile files will want.
Don't #include <libguile.h> here; that generates dependencies on
way too much. Instead, get "__scm.h", "error.h", "pairs.h",
"list.h", "gc.h", "gsubr.h", "procs.h", "numbers.h", "symbols.h",
"boolean.h", "strings.h", "vectors.h", "root.h", "ports.h", and
"async.h".
* alist.c: Get "eq.h", "list.h", "alist.h".
* append.c: Get "append.h", "list.h".
* arbiters.c: Get "arbiters.h", "smob.h".
* async.c: Get "async.h", "smob.h", "throw.h", "eval.h".
* boolean.c: Get "boolean.h".
* chars.c: Get "chars.h".
* continuations.c: Get "continuations.h", "dynwind.h", "debug.h",
"stackchk.h".
* debug.c: Get "debug.h", "feature.h", "read.h", "strports.h",
"continuations.h", "alist.h", "srcprop.h", "procprop.h", "smob.h",
"genio.h", "throw.h", "eval.h".
* dynwind.c: Get "dynwind.h", "alist.h", "eval.h".
* eq.c: Get "eq.h", "unif.h", "smob.h", "strorder.h",
"stackchk.h".
* error.c: Get "error.h", "throw.h", "genio.h", "pairs.h".
* eval.c: Get "eval.h", "stackchk.h", "srcprop.h", "debug.h",
"hashtab.h", "procprop.h", "markers.h", "smob.h", "throw.h",
"continuations.h", "eq.h", "sequences.h", "alist.h", "append.h",
"debug.h".
* fdsocket.c: Get "fdsocket.h", "unif.h", "filesys.h".
* feature.c: Get "feature.h".
* files.c: Get "files.h".
* filesys.c: Get "filesys.h", "smob.h", "genio.h".
* fports.c: Get "fports.h", "markers.h".
* gc.c: Get "async.h", "unif.h", "smob.h", "weaks.h",
"genio.h", "struct.h", "stackchk.h", "stime.h".
* gdbint.c: Get "gdbint.h", "chars.h", "eval.h", "print.h",
"read.h", "strports.h", "tag.h".
* genio.c: Get "genio.h", "chars.h".
* gsubr.c: Get "gsubr.h", "genio.h".
* hash.c: Get "hash.h", "chars.h".
* hashtab.c: Get "hashtab.h", "eval.h", "hash.h", "alist.h".
* init.c: Get everyone who has an scm_init_mumble function:
"weaks.h", "vports.h", "version.h", "vectors.h", "variable.h",
"unif.h", "throw.h", "tag.h", "symbols.h", "struct.h",
"strports.h", "strorder.h", "strop.h", "strings.h", "stime.h",
"stackchk.h", "srcprop.h", "socket.h", "simpos.h", "sequences.h",
"scmsigs.h", "read.h", "ramap.h", "procs.h", "procprop.h",
"print.h", "posix.h", "ports.h", "pairs.h", "options.h",
"objprop.h", "numbers.h", "mbstrings.h", "mallocs.h", "load.h",
"list.h", "kw.h", "ioext.h", "hashtab.h", "hash.h", "gsubr.h",
"gdbint.h", "gc.h", "fports.h", "filesys.h", "files.h",
"feature.h", "fdsocket.h", "eval.h", "error.h", "eq.h",
"dynwind.h", "debug.h", "continuations.h", "chars.h", "boolean.h",
"async.h", "arbiters.h", "append.h", "alist.h".
* ioext.c: Get "ioext.h", "fports.h".
* kw.c: Get "kw.h", "smob.h", "mbstrings.h", "genio.h".
* list.c: Get "list.h", "eq.h".
* load.c: Get "load.h", "eval.h", "read.h", "fports.h".
* mallocs.c: Get "smob.h", "genio.h".
* markers.c: Get "markers.h".
* mbstrings.c: Get "mbstrings.h", "read.h", "genio.h", "unif.h",
"chars.h".
* numbers.c: Get "unif.h", "genio.h".
* objprop.c: Get "objprop.h", "weaks.h", "alist.h", "hashtab.h".
* options.c: Get "options.h".
* ports.c: Get "ports.h", "vports.h", "strports.h", "fports.h",
"markers.h", "chars.h", "genio.h".
* posix.c: Get "posix.h", "sequences.h", "feature.h", "unif.h",
"read.h", "scmsigs.h", "genio.h", "fports.h".
* print.c: Get "print.h", "unif.h", "weaks.h", "read.h",
"procprop.h", "eval.h", "smob.h", "mbstrings.h", "genio.h",
"chars.h".
* procprop.c: Get "procprop.h", "eval.h", "alist.h".
* procs.c: Get "procs.h".
* ramap.c: Get "ramap.h", "feature.h", "eval.h", "eq.h",
"chars.h", "smob.h", "unif.h".
* read.c: Get "alist.h", "kw.h", "mbstrings.h", "unif.h",
"eval.h", "genio.h", "chars.h".
* root.c: Get "root.h", "stackchk.h".
* scmsigs.c: Get "scmsigs.h".
* sequences.c: Get "sequences.h".
* simpos.c: Get "simpos.h", "scmsigs.h".
* smob.c: Get "smob.h".
* socket.c: Get "socket.h", "feature.h".
* srcprop.c: Get "srcprop.h", "weaks.h", "hashtab.h", "debug.h",
"alist.h", "smob.h".
* stackchk.c: Get "stackchk.h", "genio.h".
* stime.c: Get "stime.h"."libguile/continuations.h".
* strings.c: Get "strings.h", "chars.h".
* strop.c: Get "strop.h", "chars.h".
* strorder.c: Get "strorder.h", "chars.h".
* strports.c: Get "strports.h", "print.h", "eval.h", "unif.h".
* struct.c: Get "struct.h", "chars.h".
* symbols.c: Get "symbols.h", "mbstrings.h", "alist.h",
"variable.h", "eval.h", "chars.h".
* tag.c: Get "tag.h", "struct.h", "chars.h".
* throw.c: Get "throw.h", "continuations.h", "debug.h",
"dynwind.h", "eval.h", "alist.h", "smob.h", "genio.h".
* unif.c: Get "unif.h", "feature.h", "strop.h", "sequences.h",
"smob.h", "genio.h", "eval.h", "chars.h".
* variable.c: Get "variable.h", "smob.h", "genio.h".
* vectors.c: Get "vectors.h", "eq.h".
* version.c: Get "version.h".
* vports.c: Get "vports.h", "fports.h", "chars.h", "eval.h".
* weaks.c: Get "weaks.h".
1996-09-10 02:26:35 +00:00
|
|
|
|
# include <stddef.h>
|
|
|
|
|
|
#endif /* def STDC_HEADERS */
|
|
|
|
|
|
|
* validate.h
(SCM_NUM2{SIZE,PTRDIFF,SHORT,USHORT,BITS,UBITS,INT,UINT}[_DEF]):
new macros.
* unif.h: type renaming:
scm_array -> scm_array_t
scm_array_dim -> scm_array_dim_t
the old names are deprecated, all in-Guile uses changed.
* tags.h (scm_ubits_t): new typedef, representing unsigned
scm_bits_t.
* stacks.h: type renaming:
scm_info_frame -> scm_info_frame_t
scm_stack -> scm_stack_t
the old names are deprecated, all in-Guile uses changed.
* srcprop.h: type renaming:
scm_srcprops -> scm_srcprops_t
scm_srcprops_chunk -> scm_srcprops_chunk_t
the old names are deprecated, all in-Guile uses changed.
* gsubr.c, procs.c, print.c, ports.c, read.c, rdelim.c, ramap.c,
rw.c, smob.c, sort.c, srcprop.c, stacks.c, strings.c, strop.c,
strorder.c, strports.c, struct.c, symbols.c, unif.c, values.c,
vectors.c, vports.c, weaks.c:
various int/size_t -> size_t/scm_bits_t changes.
* random.h: type renaming:
scm_rstate -> scm_rstate_t
scm_rng -> scm_rng_t
scm_i_rstate -> scm_i_rstate_t
the old names are deprecated, all in-Guile uses changed.
* procs.h: type renaming:
scm_subr_entry -> scm_subr_entry_t
the old name is deprecated, all in-Guile uses changed.
* options.h (scm_option_t.val): unsigned long -> scm_bits_t.
type renaming:
scm_option -> scm_option_t
the old name is deprecated, all in-Guile uses changed.
* objects.c: various long -> scm_bits_t changes.
(scm_i_make_class_object): flags: unsigned long -> scm_ubits_t
* numbers.h (SCM_FIXNUM_BIT): deprecated, renamed to
SCM_I_FIXNUM_BIT.
* num2integral.i.c: new file, multiply included by numbers.c, used
to "templatize" the various integral <-> num conversion routines.
* numbers.c (scm_mkbig, scm_big2num, scm_adjbig, scm_normbig,
scm_copybig, scm_2ulong2big, scm_dbl2big, scm_big2dbl):
deprecated.
(scm_i_mkbig, scm_i_big2inum, scm_i_adjbig, scm_i_normbig,
scm_i_copybig, scm_i_short2big, scm_i_ushort2big, scm_i_int2big,
scm_i_uint2big, scm_i_long2big, scm_i_ulong2big, scm_i_bits2big,
scm_i_ubits2big, scm_i_size2big, scm_i_ptrdiff2big,
scm_i_long_long2big, scm_i_ulong_long2big, scm_i_dbl2big,
scm_i_big2dbl, scm_short2num, scm_ushort2num, scm_int2num,
scm_uint2num, scm_bits2num, scm_ubits2num, scm_size2num,
scm_ptrdiff2num, scm_num2short, scm_num2ushort, scm_num2int,
scm_num2uint, scm_num2bits, scm_num2ubits, scm_num2ptrdiff,
scm_num2size): new functions.
* modules.c (scm_module_reverse_lookup): i, n: int -> scm_bits_t.x
* load.c: change int -> size_t in various places (where the
variable is used to store a string length).
(search-path): call scm_done_free, not scm_done_malloc.
* list.c (scm_ilength): return a scm_bits_t, not long.
some other {int,long} -> scm_bits_t changes.
* hashtab.c: various [u]int -> scm_bits_t changes.
scm_ihashx_closure -> scm_ihashx_closure_t (and made a typedef).
(scm_ihashx): n: uint -> scm_bits_t
use scm_bits2num instead of scm_ulong2num.
* gsubr.c: various int -> scm_bits_t changes.
* gh_data.c (gh_scm2double): no loss of precision any more.
* gh.h (gh_str2scm): len: int -> size_t
(gh_{get,set}_substr): start: int -> scm_bits_t,
len: int -> size_t
(gh_<num>2scm): n: int -> scm_bits_t
(gh_*vector_length): return scm_[u]size_t, not unsigned long.
(gh_length): return scm_bits_t, not unsigned long.
* fports.h: type renaming:
scm_fport -> scm_fport_t
the old name is deprecated, all in-Guile uses changed.
* fports.c (fport_fill_input): count: int -> scm_bits_t
(fport_flush): init_size, remaining, count: int -> scm_bits_t
* debug.h (scm_lookup_cstr, scm_lookup_soft, scm_evstr): removed
those prototypes, as the functions they prototype don't exist.
* fports.c (default_buffer_size): int -> size_t
(scm_fport_buffer_add): read_size, write_size: int -> scm_bits_t
default_size: int -> size_t
(scm_setvbuf): csize: int -> scm_bits_t
* fluids.c (n_fluids): int -> scm_bits_t
(grow_fluids): old_length, i: int -> scm_bits_t
(next_fluid_num, scm_fluid_ref, scm_fluid_set_x): n: int ->
scm_bits_t
(scm_c_with_fluids): flen, vlen: int -> scm_bits_t
* filesys.c (s_scm_open_fdes): changed calls to SCM_NUM2LONG to
the new and shiny SCM_NUM2INT.
* extensions.c: extension -> extension_t (and made a typedef).
* eval.h (SCM_IFRAME): cast to scm_bits_t, not int. just so
there are no nasty surprises if/when the various deeply magic tag
bits move somewhere else.
* eval.c: changed the locals used to store results of SCM_IFRAME,
scm_ilength and such to be of type scm_bits_t (and not int/long).
(iqq): depth, edepth: int -> scm_bits_t
(scm_eval_stack): int -> scm_bits_t
(SCM_CEVAL): various vars are not scm_bits_t instead of int.
(check_map_args, scm_map, scm_for_each): len: long -> scm_bits_t
i: int -> scm_bits_t
* environments.c: changed the many calls to scm_ulong2num to
scm_ubits2num.
(import_environment_fold): proc_as_ul: ulong -> scm_ubits_t
* dynwind.c (scm_dowinds): delta: long -> scm_bits_t
* debug.h: type renaming:
scm_debug_info -> scm_debug_info_t
scm_debug_frame -> scm_debug_frame_t
the old names are deprecated, all in-Guile uses changed.
(scm_debug_eframe_size): int -> scm_bits_t
* debug.c (scm_init_debug): use scm_c_define instead of the
deprecated scm_define.
* continuations.h: type renaming:
scm_contregs -> scm_contregs_t
the old name is deprecated, all in-Guile uses changed.
(scm_contregs_t.num_stack_items): size_t -> scm_bits_t
(scm_contregs_t.num_stack_items): ulong -> scm_ubits_t
* continuations.c (scm_make_continuation): change the type of
stack_size form long to scm_bits_t.
* ports.h: type renaming:
scm_port_rw_active -> scm_port_rw_active_t (and made a typedef)
scm_port -> scm_port_t
scm_ptob_descriptor -> scm_ptob_descriptor_t
the old names are deprecated, all in-Guile uses changed.
(scm_port_t.entry): int -> scm_bits_t.
(scm_port_t.line_number): int -> long.
(scm_port_t.putback_buf_size): int -> size_t.
* __scm.h (long_long, ulong_long): deprecated (they pollute the
global namespace and have little value besides that).
(SCM_BITS_LENGTH): new, is the bit size of scm_bits_t (i.e. of an
SCM handle).
(ifdef spaghetti): include sys/types.h and sys/stdtypes.h, if they
exist (for size_t & ptrdiff_t)
(scm_sizet): deprecated.
* Makefile.am (noinst_HEADERS): add num2integral.i.c
2001-05-24 00:50:51 +00:00
|
|
|
|
#if (SCM_DEBUG_DEPRECATED == 0)
|
|
|
|
|
|
# define scm_sizet size_t
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
* __scm.h: Doc fixes.
* __scm.h, libguile.h: Use "quotes" in the #includes, not
<angles>; this allows `make depends' to work properly.
C files should #include only the header files they need, not
libguile.h (which #includes all the header files); the pointless
recompilation was wasting my time.
* Makefile.in (all .o dependency lists): Regenerated.
* libguile.h: Don't try to get a definition for size_t here...
* __scm.h: Do it here.
* _scm.h: Since this is the internal libguile header, put things
here that all (or a majority) of the libguile files will want.
Don't #include <libguile.h> here; that generates dependencies on
way too much. Instead, get "__scm.h", "error.h", "pairs.h",
"list.h", "gc.h", "gsubr.h", "procs.h", "numbers.h", "symbols.h",
"boolean.h", "strings.h", "vectors.h", "root.h", "ports.h", and
"async.h".
* alist.c: Get "eq.h", "list.h", "alist.h".
* append.c: Get "append.h", "list.h".
* arbiters.c: Get "arbiters.h", "smob.h".
* async.c: Get "async.h", "smob.h", "throw.h", "eval.h".
* boolean.c: Get "boolean.h".
* chars.c: Get "chars.h".
* continuations.c: Get "continuations.h", "dynwind.h", "debug.h",
"stackchk.h".
* debug.c: Get "debug.h", "feature.h", "read.h", "strports.h",
"continuations.h", "alist.h", "srcprop.h", "procprop.h", "smob.h",
"genio.h", "throw.h", "eval.h".
* dynwind.c: Get "dynwind.h", "alist.h", "eval.h".
* eq.c: Get "eq.h", "unif.h", "smob.h", "strorder.h",
"stackchk.h".
* error.c: Get "error.h", "throw.h", "genio.h", "pairs.h".
* eval.c: Get "eval.h", "stackchk.h", "srcprop.h", "debug.h",
"hashtab.h", "procprop.h", "markers.h", "smob.h", "throw.h",
"continuations.h", "eq.h", "sequences.h", "alist.h", "append.h",
"debug.h".
* fdsocket.c: Get "fdsocket.h", "unif.h", "filesys.h".
* feature.c: Get "feature.h".
* files.c: Get "files.h".
* filesys.c: Get "filesys.h", "smob.h", "genio.h".
* fports.c: Get "fports.h", "markers.h".
* gc.c: Get "async.h", "unif.h", "smob.h", "weaks.h",
"genio.h", "struct.h", "stackchk.h", "stime.h".
* gdbint.c: Get "gdbint.h", "chars.h", "eval.h", "print.h",
"read.h", "strports.h", "tag.h".
* genio.c: Get "genio.h", "chars.h".
* gsubr.c: Get "gsubr.h", "genio.h".
* hash.c: Get "hash.h", "chars.h".
* hashtab.c: Get "hashtab.h", "eval.h", "hash.h", "alist.h".
* init.c: Get everyone who has an scm_init_mumble function:
"weaks.h", "vports.h", "version.h", "vectors.h", "variable.h",
"unif.h", "throw.h", "tag.h", "symbols.h", "struct.h",
"strports.h", "strorder.h", "strop.h", "strings.h", "stime.h",
"stackchk.h", "srcprop.h", "socket.h", "simpos.h", "sequences.h",
"scmsigs.h", "read.h", "ramap.h", "procs.h", "procprop.h",
"print.h", "posix.h", "ports.h", "pairs.h", "options.h",
"objprop.h", "numbers.h", "mbstrings.h", "mallocs.h", "load.h",
"list.h", "kw.h", "ioext.h", "hashtab.h", "hash.h", "gsubr.h",
"gdbint.h", "gc.h", "fports.h", "filesys.h", "files.h",
"feature.h", "fdsocket.h", "eval.h", "error.h", "eq.h",
"dynwind.h", "debug.h", "continuations.h", "chars.h", "boolean.h",
"async.h", "arbiters.h", "append.h", "alist.h".
* ioext.c: Get "ioext.h", "fports.h".
* kw.c: Get "kw.h", "smob.h", "mbstrings.h", "genio.h".
* list.c: Get "list.h", "eq.h".
* load.c: Get "load.h", "eval.h", "read.h", "fports.h".
* mallocs.c: Get "smob.h", "genio.h".
* markers.c: Get "markers.h".
* mbstrings.c: Get "mbstrings.h", "read.h", "genio.h", "unif.h",
"chars.h".
* numbers.c: Get "unif.h", "genio.h".
* objprop.c: Get "objprop.h", "weaks.h", "alist.h", "hashtab.h".
* options.c: Get "options.h".
* ports.c: Get "ports.h", "vports.h", "strports.h", "fports.h",
"markers.h", "chars.h", "genio.h".
* posix.c: Get "posix.h", "sequences.h", "feature.h", "unif.h",
"read.h", "scmsigs.h", "genio.h", "fports.h".
* print.c: Get "print.h", "unif.h", "weaks.h", "read.h",
"procprop.h", "eval.h", "smob.h", "mbstrings.h", "genio.h",
"chars.h".
* procprop.c: Get "procprop.h", "eval.h", "alist.h".
* procs.c: Get "procs.h".
* ramap.c: Get "ramap.h", "feature.h", "eval.h", "eq.h",
"chars.h", "smob.h", "unif.h".
* read.c: Get "alist.h", "kw.h", "mbstrings.h", "unif.h",
"eval.h", "genio.h", "chars.h".
* root.c: Get "root.h", "stackchk.h".
* scmsigs.c: Get "scmsigs.h".
* sequences.c: Get "sequences.h".
* simpos.c: Get "simpos.h", "scmsigs.h".
* smob.c: Get "smob.h".
* socket.c: Get "socket.h", "feature.h".
* srcprop.c: Get "srcprop.h", "weaks.h", "hashtab.h", "debug.h",
"alist.h", "smob.h".
* stackchk.c: Get "stackchk.h", "genio.h".
* stime.c: Get "stime.h"."libguile/continuations.h".
* strings.c: Get "strings.h", "chars.h".
* strop.c: Get "strop.h", "chars.h".
* strorder.c: Get "strorder.h", "chars.h".
* strports.c: Get "strports.h", "print.h", "eval.h", "unif.h".
* struct.c: Get "struct.h", "chars.h".
* symbols.c: Get "symbols.h", "mbstrings.h", "alist.h",
"variable.h", "eval.h", "chars.h".
* tag.c: Get "tag.h", "struct.h", "chars.h".
* throw.c: Get "throw.h", "continuations.h", "debug.h",
"dynwind.h", "eval.h", "alist.h", "smob.h", "genio.h".
* unif.c: Get "unif.h", "feature.h", "strop.h", "sequences.h",
"smob.h", "genio.h", "eval.h", "chars.h".
* variable.c: Get "variable.h", "smob.h", "genio.h".
* vectors.c: Get "vectors.h", "eq.h".
* version.c: Get "version.h".
* vports.c: Get "vports.h", "fports.h", "chars.h", "eval.h".
* weaks.c: Get "weaks.h".
1996-09-10 02:26:35 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "libguile/tags.h"
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef vms
|
|
|
|
|
|
# ifndef CHEAP_CONTINUATIONS
|
|
|
|
|
|
typedef int jmp_buf[17];
|
|
|
|
|
|
extern int setjump(jmp_buf env);
|
|
|
|
|
|
extern int longjump(jmp_buf env, int ret);
|
|
|
|
|
|
# define setjmp setjump
|
|
|
|
|
|
# define longjmp longjump
|
|
|
|
|
|
# else
|
|
|
|
|
|
# include <setjmp.h>
|
|
|
|
|
|
# endif
|
|
|
|
|
|
#else /* ndef vms */
|
|
|
|
|
|
# ifdef _CRAY1
|
|
|
|
|
|
typedef int jmp_buf[112];
|
|
|
|
|
|
extern int setjump(jmp_buf env);
|
|
|
|
|
|
extern int longjump(jmp_buf env, int ret);
|
|
|
|
|
|
# define setjmp setjump
|
|
|
|
|
|
# define longjmp longjump
|
|
|
|
|
|
# else /* ndef _CRAY1 */
|
|
|
|
|
|
# include <setjmp.h>
|
|
|
|
|
|
# endif /* ndef _CRAY1 */
|
|
|
|
|
|
#endif /* ndef vms */
|
|
|
|
|
|
|
|
|
|
|
|
/* James Clark came up with this neat one instruction fix for
|
|
|
|
|
|
* continuations on the SPARC. It flushes the register windows so
|
|
|
|
|
|
* that all the state of the process is contained in the stack.
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef sparc
|
|
|
|
|
|
# define SCM_FLUSH_REGISTER_WINDOWS asm("ta 3")
|
|
|
|
|
|
#else
|
|
|
|
|
|
# define SCM_FLUSH_REGISTER_WINDOWS /* empty */
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
/* If stack is not longword aligned then
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/* #define SHORT_ALIGN */
|
|
|
|
|
|
#ifdef THINK_C
|
|
|
|
|
|
# define SHORT_ALIGN
|
|
|
|
|
|
#endif
|
|
|
|
|
|
#ifdef MSDOS
|
|
|
|
|
|
# define SHORT_ALIGN
|
|
|
|
|
|
#endif
|
|
|
|
|
|
#ifdef atarist
|
|
|
|
|
|
# define SHORT_ALIGN
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef SHORT_ALIGN
|
|
|
|
|
|
typedef short SCM_STACKITEM;
|
|
|
|
|
|
#else
|
|
|
|
|
|
typedef long SCM_STACKITEM;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
1996-10-01 03:15:04 +00:00
|
|
|
|
#ifndef USE_THREADS
|
2001-04-17 09:15:39 +00:00
|
|
|
|
#define SCM_CRITICAL_SECTION_START
|
|
|
|
|
|
#define SCM_CRITICAL_SECTION_END
|
1996-11-02 20:52:39 +00:00
|
|
|
|
#define SCM_THREAD_SWITCHING_CODE
|
1996-10-01 03:15:04 +00:00
|
|
|
|
#endif
|
|
|
|
|
|
|
2000-03-21 23:14:31 +00:00
|
|
|
|
#ifdef GUILE_OLD_ASYNC_CLICK
|
1996-07-25 22:56:11 +00:00
|
|
|
|
extern unsigned int scm_async_clock;
|
1996-10-01 03:15:04 +00:00
|
|
|
|
|
1996-11-02 20:52:39 +00:00
|
|
|
|
#define SCM_ASYNC_TICK \
|
1999-09-28 00:18:16 +00:00
|
|
|
|
do { \
|
1996-11-02 20:52:39 +00:00
|
|
|
|
if (0 == --scm_async_clock) \
|
|
|
|
|
|
scm_async_click (); \
|
1999-09-28 00:18:16 +00:00
|
|
|
|
} while(0)
|
2000-03-21 23:14:31 +00:00
|
|
|
|
#else
|
|
|
|
|
|
extern int scm_asyncs_pending_p;
|
|
|
|
|
|
|
|
|
|
|
|
#define SCM_ASYNC_TICK /*fixme* should change names */ \
|
|
|
|
|
|
do { \
|
|
|
|
|
|
if (scm_asyncs_pending_p) \
|
|
|
|
|
|
scm_async_click (); \
|
|
|
|
|
|
} while (0)
|
|
|
|
|
|
#endif
|
1996-11-02 20:52:39 +00:00
|
|
|
|
|
2001-04-17 09:15:39 +00:00
|
|
|
|
#if (SCM_DEBUG_INTERRUPTS == 1)
|
|
|
|
|
|
#include <stdio.h>
|
1996-07-25 22:56:11 +00:00
|
|
|
|
#define SCM_CHECK_NOT_DISABLED \
|
2001-04-17 09:15:39 +00:00
|
|
|
|
do { \
|
|
|
|
|
|
if (scm_ints_disabled) \
|
|
|
|
|
|
fprintf(stderr, "ints already disabled (at %s:%d)\n", \
|
|
|
|
|
|
__FILE__, __LINE__); \
|
|
|
|
|
|
} while (0)
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
|
|
|
|
|
#define SCM_CHECK_NOT_ENABLED \
|
2001-04-17 09:15:39 +00:00
|
|
|
|
do { \
|
|
|
|
|
|
if (!scm_ints_disabled) \
|
|
|
|
|
|
fprintf(stderr, "ints already enabled (at %s:%d)\n", \
|
|
|
|
|
|
__FILE__, __LINE__); \
|
|
|
|
|
|
} while (0)
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
#define SCM_CHECK_NOT_DISABLED
|
|
|
|
|
|
#define SCM_CHECK_NOT_ENABLED
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
1997-06-23 00:51:35 +00:00
|
|
|
|
/* Anthony Green writes:
|
|
|
|
|
|
When the compiler sees...
|
|
|
|
|
|
DEFER_INTS;
|
|
|
|
|
|
[critical code here]
|
|
|
|
|
|
ALLOW_INTS;
|
|
|
|
|
|
...it doesn't actually promise to keep the critical code within the
|
|
|
|
|
|
boundries of the DEFER/ALLOW_INTS instructions. It may very well
|
|
|
|
|
|
schedule it outside of the magic defined in those macros.
|
|
|
|
|
|
|
|
|
|
|
|
However, GCC's volatile asm feature forms a barrier over which code is
|
|
|
|
|
|
never moved. So if you add...
|
1999-02-12 10:13:20 +00:00
|
|
|
|
asm ("");
|
|
|
|
|
|
...to each of the DEFER_INTS and ALLOW_INTS macros, the critical
|
|
|
|
|
|
code will always remain in place. asm's without inputs or outputs
|
|
|
|
|
|
are implicitly volatile. */
|
1997-06-23 00:51:35 +00:00
|
|
|
|
#ifdef __GNUC__
|
1999-02-12 10:13:20 +00:00
|
|
|
|
#define SCM_FENCE asm /* volatile */ ("")
|
1997-06-23 00:51:35 +00:00
|
|
|
|
#else
|
|
|
|
|
|
#define SCM_FENCE
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
1996-07-25 22:56:11 +00:00
|
|
|
|
#define SCM_DEFER_INTS \
|
1999-09-28 00:18:16 +00:00
|
|
|
|
do { \
|
1997-06-23 00:51:35 +00:00
|
|
|
|
SCM_FENCE; \
|
1996-07-25 22:56:11 +00:00
|
|
|
|
SCM_CHECK_NOT_DISABLED; \
|
2001-04-17 09:15:39 +00:00
|
|
|
|
SCM_CRITICAL_SECTION_START; \
|
1997-06-23 00:51:35 +00:00
|
|
|
|
SCM_FENCE; \
|
1996-07-25 22:56:11 +00:00
|
|
|
|
scm_ints_disabled = 1; \
|
1997-06-23 00:51:35 +00:00
|
|
|
|
SCM_FENCE; \
|
1999-09-28 00:18:16 +00:00
|
|
|
|
} while (0)
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define SCM_ALLOW_INTS_ONLY \
|
1999-09-28 00:18:16 +00:00
|
|
|
|
do { \
|
2001-04-17 09:15:39 +00:00
|
|
|
|
SCM_CRITICAL_SECTION_END; \
|
1996-07-25 22:56:11 +00:00
|
|
|
|
scm_ints_disabled = 0; \
|
1999-09-28 00:18:16 +00:00
|
|
|
|
} while (0)
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define SCM_ALLOW_INTS \
|
1999-09-28 00:18:16 +00:00
|
|
|
|
do { \
|
1997-06-23 00:51:35 +00:00
|
|
|
|
SCM_FENCE; \
|
1996-07-25 22:56:11 +00:00
|
|
|
|
SCM_CHECK_NOT_ENABLED; \
|
2001-04-17 09:15:39 +00:00
|
|
|
|
SCM_CRITICAL_SECTION_END; \
|
1998-01-30 21:06:16 +00:00
|
|
|
|
SCM_FENCE; \
|
1996-07-25 22:56:11 +00:00
|
|
|
|
scm_ints_disabled = 0; \
|
1997-06-23 00:51:35 +00:00
|
|
|
|
SCM_FENCE; \
|
2001-04-17 09:15:39 +00:00
|
|
|
|
SCM_THREAD_SWITCHING_CODE; \
|
1997-06-23 00:51:35 +00:00
|
|
|
|
SCM_FENCE; \
|
1999-09-28 00:18:16 +00:00
|
|
|
|
} while (0)
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define SCM_REDEFER_INTS \
|
1999-09-28 00:18:16 +00:00
|
|
|
|
do { \
|
1998-01-30 21:06:16 +00:00
|
|
|
|
SCM_FENCE; \
|
2001-04-17 09:15:39 +00:00
|
|
|
|
SCM_CRITICAL_SECTION_START; \
|
1996-07-25 22:56:11 +00:00
|
|
|
|
++scm_ints_disabled; \
|
1998-01-30 21:06:16 +00:00
|
|
|
|
SCM_FENCE; \
|
1999-09-28 00:18:16 +00:00
|
|
|
|
} while (0)
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define SCM_REALLOW_INTS \
|
1999-09-28 00:18:16 +00:00
|
|
|
|
do { \
|
1998-01-30 21:06:16 +00:00
|
|
|
|
SCM_FENCE; \
|
2001-04-17 09:15:39 +00:00
|
|
|
|
SCM_CRITICAL_SECTION_END; \
|
1998-01-30 21:06:16 +00:00
|
|
|
|
SCM_FENCE; \
|
1996-07-25 22:56:11 +00:00
|
|
|
|
--scm_ints_disabled; \
|
1998-01-30 21:06:16 +00:00
|
|
|
|
SCM_FENCE; \
|
1999-09-28 00:18:16 +00:00
|
|
|
|
} while (0)
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
1998-01-30 21:06:16 +00:00
|
|
|
|
#define SCM_TICK \
|
1999-09-28 00:18:16 +00:00
|
|
|
|
do { \
|
2000-03-13 10:14:24 +00:00
|
|
|
|
SCM_ASYNC_TICK; \
|
2001-04-17 09:15:39 +00:00
|
|
|
|
SCM_THREAD_SWITCHING_CODE; \
|
1999-09-28 00:18:16 +00:00
|
|
|
|
} while (0)
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1998-04-19 20:16:36 +00:00
|
|
|
|
/* Classification of critical sections
|
|
|
|
|
|
*
|
|
|
|
|
|
* When Guile moves to POSIX threads, it won't be possible to prevent
|
|
|
|
|
|
* context switching. In fact, the whole idea of context switching is
|
|
|
|
|
|
* bogus if threads are run by different processors. Therefore, we
|
|
|
|
|
|
* must ultimately eliminate all critical sections or enforce them by
|
|
|
|
|
|
* use of mutecis.
|
|
|
|
|
|
*
|
|
|
|
|
|
* All instances of SCM_DEFER_INTS and SCM_ALLOW_INTS should therefore
|
|
|
|
|
|
* be classified and replaced by one of the delimiters below. If you
|
|
|
|
|
|
* understand what this is all about, I'd like to encourage you to
|
|
|
|
|
|
* help with this task. The set of classes below must of course be
|
|
|
|
|
|
* incrementally augmented.
|
|
|
|
|
|
*
|
|
|
|
|
|
* MDJ 980419 <djurfeldt@nada.kth.se>
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/* A sections
|
|
|
|
|
|
*
|
|
|
|
|
|
* Allocation of a cell with type tag in the CAR.
|
|
|
|
|
|
*
|
|
|
|
|
|
* With POSIX threads, each thread will have a private pool of free
|
|
|
|
|
|
* cells. Therefore, this type of section can be removed. But! It
|
|
|
|
|
|
* is important that the CDR is initialized first (with the CAR still
|
|
|
|
|
|
* indicating a free cell) so that we can guarantee a consistent heap
|
|
|
|
|
|
* at all times.
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
2001-04-17 09:15:39 +00:00
|
|
|
|
#define SCM_ENTER_A_SECTION SCM_CRITICAL_SECTION_START
|
|
|
|
|
|
#define SCM_EXIT_A_SECTION SCM_CRITICAL_SECTION_END
|
1998-04-19 20:16:36 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1996-07-25 22:56:11 +00:00
|
|
|
|
/** SCM_ASSERT
|
|
|
|
|
|
**
|
|
|
|
|
|
**/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef SCM_RECKLESS
|
|
|
|
|
|
#define SCM_ASSERT(_cond, _arg, _pos, _subr)
|
2001-02-28 16:58:12 +00:00
|
|
|
|
#define SCM_ASSERT_TYPE(_cond, _arg, _pos, _subr, _msg)
|
1996-07-25 22:56:11 +00:00
|
|
|
|
#define SCM_ASRTGO(_cond, _label)
|
|
|
|
|
|
#else
|
|
|
|
|
|
#define SCM_ASSERT(_cond, _arg, _pos, _subr) \
|
|
|
|
|
|
if (!(_cond)) \
|
* __scm.h (SCM_ASSERT, SCM_WTA_DISPATCH_0, SCM_WTA_DISPATCH_1,
SCM_WTA_DISPATCH_2, SCM_WTA_DISPATCH_n): Don't call scm_wta, call
scm_wrong_type_arg instead.
(SCM_WNA): Deprecated.
* error.[ch] (scm_wta): Deprecated.
* numbers.c (s_i_log): Minor comment fix.
* read.c (scm_lreadr), unif.c (scm_aind, scm_shap2ra,
scm_make_shared_array, scm_transpose_array, scm_enclose_array,
scm_array_in_bounds_p): Don't use SCM_ASSERT to check for
wrong-num-args or misc errors.
* unif.c (scm_make_shared_array, scm_transpose_array,
scm_enclose_array, scm_array_in_bounds_p, scm_array_set_x):
Validate the rest argument (note: this is only done when guile is
built with SCM_DEBUG_REST_ARGUMENT=1)
(scm_array_in_bounds_p, scm_uniform_vector_ref, scm_array_set_x):
Replace calls to scm_wrong_num_args by SCM_WRONG_NUM_ARGS.
* validate.h (SCM_FUNC_NAME, SCM_VALIDATE_NUMBER_COPY,
SCM_VALIDATE_NUMBER_DEF_COPY): Deprecated.
2001-03-17 13:34:21 +00:00
|
|
|
|
scm_wrong_type_arg (_subr, _pos, _arg)
|
2000-03-03 00:09:54 +00:00
|
|
|
|
#define SCM_ASSERT_TYPE(_cond, _arg, _pos, _subr, _msg) \
|
|
|
|
|
|
if (!(_cond)) \
|
|
|
|
|
|
scm_wrong_type_arg_msg(_subr, _pos, _arg, _msg)
|
1996-07-25 22:56:11 +00:00
|
|
|
|
#define SCM_ASRTGO(_cond, _label) \
|
|
|
|
|
|
if (!(_cond)) \
|
|
|
|
|
|
goto _label
|
|
|
|
|
|
#endif
|
1996-08-07 09:46:41 +00:00
|
|
|
|
|
* procs.c, procs.h (scm_subr_entry): New type: Stores data
associated with subrs.
(SCM_SUBRNUM, SCM_SUBR_ENTRY, SCM_SUBR_GENERIC, SCM_SUBR_PROPS,
SCM_SUBR_DOC): New macros.
(scm_subr_table): New variable.
(scm_mark_subr_table): New function.
* init.c (scm_boot_guile_1): Call scm_init_subr_table.
* gc.c (scm_gc_mark): Don't mark subr names here.
(scm_igc): Call scm_mark_subr_table.
* snarf.h (SCM_GPROC, SCM_GPROC1): New macros.
* procs.c, procs.h (scm_subr_p): New function (used internally).
* gsubr.c, gsubr.h (scm_make_gsubr_with_generic): New function.
* objects.c, objects.h (scm_primitive_generic): New class.
* objects.h (SCM_CMETHOD_CODE, SCM_CMETHOD_ENV): New macros.
* print.c (scm_iprin1): Print primitive-generics.
* __scm.h (SCM_WTA_DISPATCH_1, SCM_GASSERT1,
SCM_WTA_DISPATCH_2, SCM_GASSERT2): New macros.
* eval.c (SCM_CEVAL, SCM_APPLY): Replace scm_wta -->
SCM_WTA_DISPATCH_1 for scm_cxr's (unary floating point
primitives). NOTE: This means that it is now *required* to use
SCM_GPROC1 when creating float scm_cxr's (float scm_cxr's is an
obscured representation that will be removed in the future anyway,
so backward compatibility is no problem here).
* numbers.c: Converted most numeric primitives (all but bit
comparison operations and bit operations) to dispatch on generic
if args don't match.
* eval.c, eval.h (scm_eval_body): New function.
* objects.c (scm_call_generic_0, scm_call_generic_1,
scm_call_generic_2, scm_call_generic_3, scm_apply_generic): New
functions.
* eval.c (SCM_CEVAL): Apply the cmethod directly after having
called scm_memoize_method instead of doing a second lookup.
* objects.h (scm_memoize_method): Now returns the memoized cmethod.
* procs.c (scm_make_subr_opt): Use scm_sysintern0 instead of
scm_sysintern so that the binding connected with the subr name
isn't cleared when we give set = 0.
1999-08-26 04:24:42 +00:00
|
|
|
|
/*
|
|
|
|
|
|
* SCM_WTA_DISPATCH
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
2000-04-07 10:41:39 +00:00
|
|
|
|
/* Dirk:FIXME:: In all of the SCM_WTA_DISPATCH_* macros it is assumed that
|
|
|
|
|
|
* 'gf' is zero if uninitialized. It would be cleaner if some valid SCM value
|
|
|
|
|
|
* like SCM_BOOL_F or SCM_UNDEFINED was chosen.
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
1999-09-20 22:09:21 +00:00
|
|
|
|
extern SCM scm_call_generic_0 (SCM gf);
|
|
|
|
|
|
|
2001-05-06 01:25:15 +00:00
|
|
|
|
#define SCM_WTA_DISPATCH_0(gf, subr) \
|
2001-04-19 21:10:52 +00:00
|
|
|
|
return (SCM_UNPACK (gf) \
|
|
|
|
|
|
? scm_call_generic_0 ((gf)) \
|
2001-05-06 01:25:15 +00:00
|
|
|
|
: (scm_error_num_args_subr ((subr)), SCM_UNSPECIFIED))
|
|
|
|
|
|
#define SCM_GASSERT0(cond, gf, subr) \
|
|
|
|
|
|
if (!(cond)) SCM_WTA_DISPATCH_0((gf), (subr))
|
1999-09-20 22:09:21 +00:00
|
|
|
|
|
* procs.c, procs.h (scm_subr_entry): New type: Stores data
associated with subrs.
(SCM_SUBRNUM, SCM_SUBR_ENTRY, SCM_SUBR_GENERIC, SCM_SUBR_PROPS,
SCM_SUBR_DOC): New macros.
(scm_subr_table): New variable.
(scm_mark_subr_table): New function.
* init.c (scm_boot_guile_1): Call scm_init_subr_table.
* gc.c (scm_gc_mark): Don't mark subr names here.
(scm_igc): Call scm_mark_subr_table.
* snarf.h (SCM_GPROC, SCM_GPROC1): New macros.
* procs.c, procs.h (scm_subr_p): New function (used internally).
* gsubr.c, gsubr.h (scm_make_gsubr_with_generic): New function.
* objects.c, objects.h (scm_primitive_generic): New class.
* objects.h (SCM_CMETHOD_CODE, SCM_CMETHOD_ENV): New macros.
* print.c (scm_iprin1): Print primitive-generics.
* __scm.h (SCM_WTA_DISPATCH_1, SCM_GASSERT1,
SCM_WTA_DISPATCH_2, SCM_GASSERT2): New macros.
* eval.c (SCM_CEVAL, SCM_APPLY): Replace scm_wta -->
SCM_WTA_DISPATCH_1 for scm_cxr's (unary floating point
primitives). NOTE: This means that it is now *required* to use
SCM_GPROC1 when creating float scm_cxr's (float scm_cxr's is an
obscured representation that will be removed in the future anyway,
so backward compatibility is no problem here).
* numbers.c: Converted most numeric primitives (all but bit
comparison operations and bit operations) to dispatch on generic
if args don't match.
* eval.c, eval.h (scm_eval_body): New function.
* objects.c (scm_call_generic_0, scm_call_generic_1,
scm_call_generic_2, scm_call_generic_3, scm_apply_generic): New
functions.
* eval.c (SCM_CEVAL): Apply the cmethod directly after having
called scm_memoize_method instead of doing a second lookup.
* objects.h (scm_memoize_method): Now returns the memoized cmethod.
* procs.c (scm_make_subr_opt): Use scm_sysintern0 instead of
scm_sysintern so that the binding connected with the subr name
isn't cleared when we give set = 0.
1999-08-26 04:24:42 +00:00
|
|
|
|
extern SCM scm_call_generic_1 (SCM gf, SCM a1);
|
|
|
|
|
|
|
2001-04-19 21:10:52 +00:00
|
|
|
|
#define SCM_WTA_DISPATCH_1(gf, a1, pos, subr) \
|
|
|
|
|
|
return (SCM_UNPACK (gf) \
|
|
|
|
|
|
? scm_call_generic_1 ((gf), (a1)) \
|
|
|
|
|
|
: (scm_wrong_type_arg ((subr), (pos), (a1)), SCM_UNSPECIFIED))
|
* procs.c, procs.h (scm_subr_entry): New type: Stores data
associated with subrs.
(SCM_SUBRNUM, SCM_SUBR_ENTRY, SCM_SUBR_GENERIC, SCM_SUBR_PROPS,
SCM_SUBR_DOC): New macros.
(scm_subr_table): New variable.
(scm_mark_subr_table): New function.
* init.c (scm_boot_guile_1): Call scm_init_subr_table.
* gc.c (scm_gc_mark): Don't mark subr names here.
(scm_igc): Call scm_mark_subr_table.
* snarf.h (SCM_GPROC, SCM_GPROC1): New macros.
* procs.c, procs.h (scm_subr_p): New function (used internally).
* gsubr.c, gsubr.h (scm_make_gsubr_with_generic): New function.
* objects.c, objects.h (scm_primitive_generic): New class.
* objects.h (SCM_CMETHOD_CODE, SCM_CMETHOD_ENV): New macros.
* print.c (scm_iprin1): Print primitive-generics.
* __scm.h (SCM_WTA_DISPATCH_1, SCM_GASSERT1,
SCM_WTA_DISPATCH_2, SCM_GASSERT2): New macros.
* eval.c (SCM_CEVAL, SCM_APPLY): Replace scm_wta -->
SCM_WTA_DISPATCH_1 for scm_cxr's (unary floating point
primitives). NOTE: This means that it is now *required* to use
SCM_GPROC1 when creating float scm_cxr's (float scm_cxr's is an
obscured representation that will be removed in the future anyway,
so backward compatibility is no problem here).
* numbers.c: Converted most numeric primitives (all but bit
comparison operations and bit operations) to dispatch on generic
if args don't match.
* eval.c, eval.h (scm_eval_body): New function.
* objects.c (scm_call_generic_0, scm_call_generic_1,
scm_call_generic_2, scm_call_generic_3, scm_apply_generic): New
functions.
* eval.c (SCM_CEVAL): Apply the cmethod directly after having
called scm_memoize_method instead of doing a second lookup.
* objects.h (scm_memoize_method): Now returns the memoized cmethod.
* procs.c (scm_make_subr_opt): Use scm_sysintern0 instead of
scm_sysintern so that the binding connected with the subr name
isn't cleared when we give set = 0.
1999-08-26 04:24:42 +00:00
|
|
|
|
#define SCM_GASSERT1(cond, gf, a1, pos, subr) \
|
|
|
|
|
|
if (!(cond)) SCM_WTA_DISPATCH_1((gf), (a1), (pos), (subr))
|
|
|
|
|
|
|
|
|
|
|
|
extern SCM scm_call_generic_2 (SCM gf, SCM a1, SCM a2);
|
|
|
|
|
|
|
2001-04-19 21:10:52 +00:00
|
|
|
|
#define SCM_WTA_DISPATCH_2(gf, a1, a2, pos, subr) \
|
|
|
|
|
|
return (SCM_UNPACK (gf) \
|
|
|
|
|
|
? scm_call_generic_2 ((gf), (a1), (a2)) \
|
|
|
|
|
|
: (scm_wrong_type_arg ((subr), (pos), \
|
|
|
|
|
|
(pos) == SCM_ARG1 ? (a1) : (a2)), \
|
|
|
|
|
|
SCM_UNSPECIFIED))
|
* procs.c, procs.h (scm_subr_entry): New type: Stores data
associated with subrs.
(SCM_SUBRNUM, SCM_SUBR_ENTRY, SCM_SUBR_GENERIC, SCM_SUBR_PROPS,
SCM_SUBR_DOC): New macros.
(scm_subr_table): New variable.
(scm_mark_subr_table): New function.
* init.c (scm_boot_guile_1): Call scm_init_subr_table.
* gc.c (scm_gc_mark): Don't mark subr names here.
(scm_igc): Call scm_mark_subr_table.
* snarf.h (SCM_GPROC, SCM_GPROC1): New macros.
* procs.c, procs.h (scm_subr_p): New function (used internally).
* gsubr.c, gsubr.h (scm_make_gsubr_with_generic): New function.
* objects.c, objects.h (scm_primitive_generic): New class.
* objects.h (SCM_CMETHOD_CODE, SCM_CMETHOD_ENV): New macros.
* print.c (scm_iprin1): Print primitive-generics.
* __scm.h (SCM_WTA_DISPATCH_1, SCM_GASSERT1,
SCM_WTA_DISPATCH_2, SCM_GASSERT2): New macros.
* eval.c (SCM_CEVAL, SCM_APPLY): Replace scm_wta -->
SCM_WTA_DISPATCH_1 for scm_cxr's (unary floating point
primitives). NOTE: This means that it is now *required* to use
SCM_GPROC1 when creating float scm_cxr's (float scm_cxr's is an
obscured representation that will be removed in the future anyway,
so backward compatibility is no problem here).
* numbers.c: Converted most numeric primitives (all but bit
comparison operations and bit operations) to dispatch on generic
if args don't match.
* eval.c, eval.h (scm_eval_body): New function.
* objects.c (scm_call_generic_0, scm_call_generic_1,
scm_call_generic_2, scm_call_generic_3, scm_apply_generic): New
functions.
* eval.c (SCM_CEVAL): Apply the cmethod directly after having
called scm_memoize_method instead of doing a second lookup.
* objects.h (scm_memoize_method): Now returns the memoized cmethod.
* procs.c (scm_make_subr_opt): Use scm_sysintern0 instead of
scm_sysintern so that the binding connected with the subr name
isn't cleared when we give set = 0.
1999-08-26 04:24:42 +00:00
|
|
|
|
#define SCM_GASSERT2(cond, gf, a1, a2, pos, subr) \
|
|
|
|
|
|
if (!(cond)) SCM_WTA_DISPATCH_2((gf), (a1), (a2), (pos), (subr))
|
|
|
|
|
|
|
1999-09-07 09:40:35 +00:00
|
|
|
|
extern SCM scm_apply_generic (SCM gf, SCM args);
|
|
|
|
|
|
|
2001-04-19 21:10:52 +00:00
|
|
|
|
#define SCM_WTA_DISPATCH_n(gf, args, pos, subr) \
|
|
|
|
|
|
return (SCM_UNPACK (gf) \
|
|
|
|
|
|
? scm_apply_generic ((gf), (args)) \
|
|
|
|
|
|
: (scm_wrong_type_arg ((subr), (pos), \
|
|
|
|
|
|
scm_list_ref ((args), \
|
|
|
|
|
|
SCM_MAKINUM ((pos) - 1))), \
|
|
|
|
|
|
SCM_UNSPECIFIED))
|
1999-09-07 09:40:35 +00:00
|
|
|
|
#define SCM_GASSERTn(cond, gf, args, pos, subr) \
|
|
|
|
|
|
if (!(cond)) SCM_WTA_DISPATCH_n((gf), (args), (pos), (subr))
|
|
|
|
|
|
|
2000-01-05 18:48:07 +00:00
|
|
|
|
#ifndef SCM_MAGIC_SNARFER
|
|
|
|
|
|
/* Let these macros pass through if
|
|
|
|
|
|
we are snarfing; thus we can tell the
|
|
|
|
|
|
difference between the use of an actual
|
|
|
|
|
|
number vs. the use of one of these macros --
|
2000-01-05 18:55:04 +00:00
|
|
|
|
actual numbers in SCM_VALIDATE_* and SCM_ASSERT
|
2000-01-05 18:48:07 +00:00
|
|
|
|
constructs must match the formal argument name,
|
|
|
|
|
|
but using SCM_ARG* avoids the test */
|
|
|
|
|
|
|
1996-07-25 22:56:11 +00:00
|
|
|
|
#define SCM_ARGn 0
|
|
|
|
|
|
#define SCM_ARG1 1
|
|
|
|
|
|
#define SCM_ARG2 2
|
|
|
|
|
|
#define SCM_ARG3 3
|
|
|
|
|
|
#define SCM_ARG4 4
|
|
|
|
|
|
#define SCM_ARG5 5
|
* ports.c: add SCM_PROC declarations for pt-size and pt-member.
* Makefile.am: remove AWK=@AWK@.
Add a rule for generating errnos.list.
(CLEANFILES): put errnos.list here instead of in DISTCLEANFILES.
* configure.in: add AC_SUBST(AWK) and AC_SUBST(ERRNO_EXTRACT).
don't extract errnos, just set a variable (avoids the
need to recompile error.c just because configure is run.)
* unif.h: update prototypes.
* unif.c (scm_uniform_array_read,write): change the offset and
length arguments to start and end, for consistency.
* __scm.h: uncomment SCM_ARG6 and SCM_ARG7, I needed SCM_ARG6.
* ioext.h: update prototypes.
* * ioext.c (scm_read_delimited_x): replaces scm_read_line and
scm_read_line_x, it's a more general procedure using an
interface from scsh. read-line and read-line! are now defined
in boot-9.scm.
* Note that the new read-line trims the terminator
by default, previously it was appended to the returned string. An
optional argument specifies how to process the terminator (scsh
compatible). For the old behaviour: (read-line port 'concat).
scm_read_line, scm_read_line_x: deleted. (read-line port 'split)
returns a pair, but is converted to multiple values if the scsh
module is loaded.
socket.h: update prototypes.
* socket.c (scm_recvfrom): for consistency with other procedures,
take start and end as separate optional arguments.
* (scm_recv, scm_recvfrom): don't allow the second argument
to be a size, only a buffer. Change the scheme names to
recv! and recvfrom!. Don't return the buffer.
* ioext.h, posix.h: move prototypes too.
* ioext.c, posix.c (scm_read_line, scm_read_line_x, scm_write_line:
moved back from posix.c to ioext.c. Also move #includes of "genio.h"
"read.h" and "unif.h".
* ioext.c: include "chars.h"
1997-01-25 18:23:49 +00:00
|
|
|
|
#define SCM_ARG6 6
|
|
|
|
|
|
#define SCM_ARG7 7
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
2000-06-30 17:37:26 +00:00
|
|
|
|
#if (SCM_DEBUG_DEPRECATED == 0)
|
|
|
|
|
|
|
* __scm.h (SCM_ASSERT, SCM_WTA_DISPATCH_0, SCM_WTA_DISPATCH_1,
SCM_WTA_DISPATCH_2, SCM_WTA_DISPATCH_n): Don't call scm_wta, call
scm_wrong_type_arg instead.
(SCM_WNA): Deprecated.
* error.[ch] (scm_wta): Deprecated.
* numbers.c (s_i_log): Minor comment fix.
* read.c (scm_lreadr), unif.c (scm_aind, scm_shap2ra,
scm_make_shared_array, scm_transpose_array, scm_enclose_array,
scm_array_in_bounds_p): Don't use SCM_ASSERT to check for
wrong-num-args or misc errors.
* unif.c (scm_make_shared_array, scm_transpose_array,
scm_enclose_array, scm_array_in_bounds_p, scm_array_set_x):
Validate the rest argument (note: this is only done when guile is
built with SCM_DEBUG_REST_ARGUMENT=1)
(scm_array_in_bounds_p, scm_uniform_vector_ref, scm_array_set_x):
Replace calls to scm_wrong_num_args by SCM_WRONG_NUM_ARGS.
* validate.h (SCM_FUNC_NAME, SCM_VALIDATE_NUMBER_COPY,
SCM_VALIDATE_NUMBER_DEF_COPY): Deprecated.
2001-03-17 13:34:21 +00:00
|
|
|
|
/* Use SCM_WRONG_NUM_ARGS instead of: */
|
|
|
|
|
|
#define SCM_WNA 8
|
|
|
|
|
|
|
2000-06-30 17:37:26 +00:00
|
|
|
|
/* Use SCM_ASSERT_RANGE or SCM_VALIDATE_XXX_RANGE instead of: */
|
|
|
|
|
|
#define SCM_OUTOFRANGE 10
|
|
|
|
|
|
|
|
|
|
|
|
/* Use scm_memory_error instead of: */
|
|
|
|
|
|
#define SCM_NALLOC 11
|
|
|
|
|
|
|
|
|
|
|
|
#define SCM_HUP_SIGNAL 14
|
|
|
|
|
|
#define SCM_INT_SIGNAL 15
|
|
|
|
|
|
#define SCM_FPE_SIGNAL 16
|
|
|
|
|
|
#define SCM_BUS_SIGNAL 17
|
|
|
|
|
|
#define SCM_SEGV_SIGNAL 18
|
|
|
|
|
|
#define SCM_ALRM_SIGNAL 19
|
|
|
|
|
|
#define SCM_GC_SIGNAL 20
|
|
|
|
|
|
#define SCM_TICK_SIGNAL 21
|
|
|
|
|
|
#define SCM_SIG_ORD(X) ((X) - SCM_HUP_SIGNAL)
|
|
|
|
|
|
#define SCM_ORD_SIG(X) ((X) + SCM_HUP_SIGNAL)
|
|
|
|
|
|
#define SCM_NUM_SIGS (SCM_SIG_ORD (SCM_TICK_SIGNAL) + 1)
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* SCM_DEBUG_DEPRECATED == 0 */
|
|
|
|
|
|
|
2000-01-05 18:48:07 +00:00
|
|
|
|
#endif /* SCM_MAGIC_SNARFER */
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* SCM_EXIT_SUCCESS is the default code to return from SCM if no errors
|
|
|
|
|
|
* were encountered. SCM_EXIT_FAILURE is the default code to return from
|
|
|
|
|
|
* SCM if errors were encountered. The return code can be explicitly
|
|
|
|
|
|
* specified in a SCM program with (scm_quit <n>).
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef SCM_EXIT_SUCCESS
|
|
|
|
|
|
#ifdef vms
|
|
|
|
|
|
#define SCM_EXIT_SUCCESS 1
|
|
|
|
|
|
#else
|
|
|
|
|
|
#define SCM_EXIT_SUCCESS 0
|
|
|
|
|
|
#endif /* def vms */
|
|
|
|
|
|
#endif /* ndef SCM_EXIT_SUCCESS */
|
|
|
|
|
|
#ifndef SCM_EXIT_FAILURE
|
|
|
|
|
|
#ifdef vms
|
|
|
|
|
|
#define SCM_EXIT_FAILURE 2
|
|
|
|
|
|
#else
|
|
|
|
|
|
#define SCM_EXIT_FAILURE 1
|
|
|
|
|
|
#endif /* def vms */
|
|
|
|
|
|
#endif /* ndef SCM_EXIT_FAILURE */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2001-05-27 22:00:03 +00:00
|
|
|
|
#endif /* SCM___SCM_H */
|
2000-03-19 19:01:16 +00:00
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
Local Variables:
|
|
|
|
|
|
c-file-style: "gnu"
|
|
|
|
|
|
End:
|
|
|
|
|
|
*/
|