2000-03-14 06:41:56 +00:00
|
|
|
|
/* Copyright (C) 1995, 1996, 1997, 1999, 2000 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. */
|
1999-12-12 02:36:16 +00:00
|
|
|
|
|
|
|
|
|
|
/* Software engineering face-lift by Greg J. Badros, 11-Dec-1999,
|
|
|
|
|
|
gjb@cs.washington.edu, http://www.cs.washington.edu/homes/gjb */
|
|
|
|
|
|
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include <stdio.h>
|
2000-04-21 14:16:44 +00:00
|
|
|
|
#include "libguile/_scm.h"
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
2000-04-21 14:16:44 +00:00
|
|
|
|
#include "libguile/objects.h"
|
|
|
|
|
|
#include "libguile/strings.h"
|
|
|
|
|
|
#include "libguile/vectors.h"
|
2000-08-25 02:26:22 +00:00
|
|
|
|
#include "libguile/smob.h"
|
1998-11-21 17:01:48 +00:00
|
|
|
|
|
2000-04-21 14:16:44 +00:00
|
|
|
|
#include "libguile/validate.h"
|
|
|
|
|
|
#include "libguile/procs.h"
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* {Procedures}
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
* 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_subr_entry *scm_subr_table;
|
|
|
|
|
|
|
1999-08-31 08:49:21 +00:00
|
|
|
|
/* libguile contained approx. 700 primitive procedures on 24 Aug 1999. */
|
* 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
|
|
|
|
|
|
|
|
|
|
int scm_subr_table_size = 0;
|
|
|
|
|
|
int scm_subr_table_room = 750;
|
* __scm.h, alist.c, alist.h, append.c, append.h, appinit.c,
arbiters.c, arbiters.h, async.c, async.h, boolean.c, boolean.h,
chars.c, chars.h, continuations.c, continuations.h, debug.c,
debug.h, dynwind.c, dynwind.h, eq.c, eq.h, error.c, eval.c,
eval.h, extchrs.c, extchrs.h, fdsocket.c, fdsocket.h, filesys.c,
filesys.h, fports.c, fports.h, gc.c, gdb_interface.h, gdbint.c,
gdbint.h, genio.c, genio.h, gscm.c, gscm.h, gsubr.c, gsubr.h,
hash.c, hash.h, hashtab.c, hashtab.h, init.c, ioext.c, ioext.h,
kw.c, kw.h, libguile.h, mallocs.c, mallocs.h, markers.c,
markers.h, mbstrings.c, mbstrings.h, numbers.c, numbers.h,
objprop.c, objprop.h, options.c, options.h, pairs.c, pairs.h,
ports.c, ports.h, posix.c, posix.h, print.c, print.h, procprop.c,
procprop.h, procs.c, procs.h, ramap.c, ramap.h, read.c, read.h,
root.c, scmsigs.c, scmsigs.h, sequences.c, sequences.h, simpos.c,
simpos.h, smob.c, socket.c, socket.h, srcprop.c, srcprop.h,
stackchk.c, stackchk.h, stime.c, stime.h, strings.c, strings.h,
strop.c, strop.h, strorder.c, strorder.h, strports.c, strports.h,
struct.c, struct.h, symbols.c, symbols.h, tag.c, tag.h, unif.c,
unif.h, variable.c, variable.h, vectors.c, vectors.h, version.c,
version.h, vports.c, vports.h, weaks.c, weaks.h: Use SCM_P to
declare functions with prototypes. (Patch thanks to Marius
Vollmer.)
1996-10-14 01:33:50 +00:00
|
|
|
|
|
1996-07-25 22:56:11 +00:00
|
|
|
|
SCM
|
1999-12-12 02:36:16 +00:00
|
|
|
|
scm_make_subr_opt (const char *name, int type, SCM (*fcn) (), int set)
|
1996-07-25 22:56:11 +00:00
|
|
|
|
{
|
2000-12-22 16:46:17 +00:00
|
|
|
|
SCM symbol;
|
1996-07-25 22:56:11 +00:00
|
|
|
|
SCM symcell;
|
|
|
|
|
|
register SCM z;
|
* 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
|
|
|
|
int entry;
|
|
|
|
|
|
|
|
|
|
|
|
if (scm_subr_table_size == scm_subr_table_room)
|
|
|
|
|
|
{
|
1999-08-31 08:49:21 +00:00
|
|
|
|
scm_sizet new_size = scm_subr_table_room * 3 / 2;
|
|
|
|
|
|
void *new_table
|
|
|
|
|
|
= scm_must_realloc ((char *) scm_subr_table,
|
|
|
|
|
|
sizeof (scm_subr_entry) * scm_subr_table_room,
|
|
|
|
|
|
sizeof (scm_subr_entry) * new_size,
|
2000-04-19 03:25:22 +00:00
|
|
|
|
"scm_subr_table");
|
* 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_subr_table = new_table;
|
|
|
|
|
|
scm_subr_table_room = new_size;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
1996-07-25 22:56:11 +00:00
|
|
|
|
SCM_NEWCELL (z);
|
2000-12-22 16:46:17 +00:00
|
|
|
|
if (set)
|
|
|
|
|
|
{
|
|
|
|
|
|
symcell = scm_sysintern (name, SCM_UNDEFINED);
|
|
|
|
|
|
symbol = SCM_CAR (symcell);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
symbol = scm_str2symbol (name);
|
|
|
|
|
|
}
|
* 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
|
|
|
|
|
|
|
|
|
|
entry = scm_subr_table_size;
|
|
|
|
|
|
scm_subr_table[entry].handle = z;
|
2000-12-22 16:46:17 +00:00
|
|
|
|
scm_subr_table[entry].name = symbol;
|
* 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_subr_table[entry].generic = 0;
|
|
|
|
|
|
|
2000-06-05 12:54:40 +00:00
|
|
|
|
SCM_SET_SUBRF (z, fcn);
|
2000-04-03 08:47:51 +00:00
|
|
|
|
SCM_SET_CELL_TYPE (z, (entry << 8) + type);
|
* 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_subr_table_size++;
|
|
|
|
|
|
|
1996-07-25 22:56:11 +00:00
|
|
|
|
if (set)
|
* alist.c, arbiters.c, continuations.c, debug.c, debug.h, eval.c,
eval.h, feature.c, filesys.c, fports.c, gc.c, gsubr.c, init.c,
ioext.c, kw.c, list.c, load.c, mallocs.c, numbers.c, numbers.h,
pairs.c, pairs.h, ports.c, ports.h, posix.c, procprop.c, procs.c,
procs.h, ramap.c, read.c, root.c, srcprop.c, srcprop.h,
strports.c, symbols.c, tags.h, throw.c, unif.c, variable.c,
vports.c: Cleaned up use of pairs: Don't make any special
assumptions about the internal structure of selectors and
mutators: SCM_CXR (<e1>) = <e2> --> SCM_SETCXR (<e1>, <e2>),
SCM_CXR (<e1>) &= <e2> --> SCM_SETAND_CXR (<e1>, <e2>) etc.
(Among other things, this change makes it easier to build Guile
with certain compilers which have problems with casted lvalues.)
1996-10-20 03:31:08 +00:00
|
|
|
|
SCM_SETCDR (symcell, z);
|
* 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
|
|
|
|
|
1996-07-25 22:56:11 +00:00
|
|
|
|
return z;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
* 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
|
|
|
|
/* This function isn't currently used since subrs are never freed. */
|
|
|
|
|
|
/* *fixme* Need mutex here. */
|
|
|
|
|
|
void
|
|
|
|
|
|
scm_free_subr_entry (SCM subr)
|
|
|
|
|
|
{
|
|
|
|
|
|
int entry = SCM_SUBRNUM (subr);
|
|
|
|
|
|
/* Move last entry in table to the free position */
|
|
|
|
|
|
scm_subr_table[entry] = scm_subr_table[scm_subr_table_size - 1];
|
|
|
|
|
|
SCM_SET_SUBRNUM (scm_subr_table[entry].handle, entry);
|
|
|
|
|
|
scm_subr_table_size--;
|
|
|
|
|
|
}
|
* __scm.h, alist.c, alist.h, append.c, append.h, appinit.c,
arbiters.c, arbiters.h, async.c, async.h, boolean.c, boolean.h,
chars.c, chars.h, continuations.c, continuations.h, debug.c,
debug.h, dynwind.c, dynwind.h, eq.c, eq.h, error.c, eval.c,
eval.h, extchrs.c, extchrs.h, fdsocket.c, fdsocket.h, filesys.c,
filesys.h, fports.c, fports.h, gc.c, gdb_interface.h, gdbint.c,
gdbint.h, genio.c, genio.h, gscm.c, gscm.h, gsubr.c, gsubr.h,
hash.c, hash.h, hashtab.c, hashtab.h, init.c, ioext.c, ioext.h,
kw.c, kw.h, libguile.h, mallocs.c, mallocs.h, markers.c,
markers.h, mbstrings.c, mbstrings.h, numbers.c, numbers.h,
objprop.c, objprop.h, options.c, options.h, pairs.c, pairs.h,
ports.c, ports.h, posix.c, posix.h, print.c, print.h, procprop.c,
procprop.h, procs.c, procs.h, ramap.c, ramap.h, read.c, read.h,
root.c, scmsigs.c, scmsigs.h, sequences.c, sequences.h, simpos.c,
simpos.h, smob.c, socket.c, socket.h, srcprop.c, srcprop.h,
stackchk.c, stackchk.h, stime.c, stime.h, strings.c, strings.h,
strop.c, strop.h, strorder.c, strorder.h, strports.c, strports.h,
struct.c, struct.h, symbols.c, symbols.h, tag.c, tag.h, unif.c,
unif.h, variable.c, variable.h, vectors.c, vectors.h, version.c,
version.h, vports.c, vports.h, weaks.c, weaks.h: Use SCM_P to
declare functions with prototypes. (Patch thanks to Marius
Vollmer.)
1996-10-14 01:33:50 +00:00
|
|
|
|
|
1996-07-25 22:56:11 +00:00
|
|
|
|
SCM
|
1999-12-12 02:36:16 +00:00
|
|
|
|
scm_make_subr (const char *name, int type, SCM (*fcn) ())
|
1996-07-25 22:56:11 +00:00
|
|
|
|
{
|
|
|
|
|
|
return scm_make_subr_opt (name, type, fcn, 1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
* 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
|
|
|
|
|
|
scm_make_subr_with_generic (const char *name, int type, SCM (*fcn) (), SCM *gf)
|
|
|
|
|
|
{
|
|
|
|
|
|
SCM subr = scm_make_subr_opt (name, type, fcn, 1);
|
|
|
|
|
|
scm_subr_table[scm_subr_table_size - 1].generic = gf;
|
|
|
|
|
|
return subr;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
|
scm_mark_subr_table ()
|
|
|
|
|
|
{
|
|
|
|
|
|
int i;
|
|
|
|
|
|
for (i = 0; i < scm_subr_table_size; ++i)
|
|
|
|
|
|
{
|
2000-12-06 15:16:59 +00:00
|
|
|
|
SCM_SETGCMARK (scm_subr_table[i].name);
|
* 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
|
|
|
|
if (scm_subr_table[i].generic && *scm_subr_table[i].generic)
|
|
|
|
|
|
scm_gc_mark (*scm_subr_table[i].generic);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
* __scm.h, alist.c, alist.h, append.c, append.h, appinit.c,
arbiters.c, arbiters.h, async.c, async.h, boolean.c, boolean.h,
chars.c, chars.h, continuations.c, continuations.h, debug.c,
debug.h, dynwind.c, dynwind.h, eq.c, eq.h, error.c, eval.c,
eval.h, extchrs.c, extchrs.h, fdsocket.c, fdsocket.h, filesys.c,
filesys.h, fports.c, fports.h, gc.c, gdb_interface.h, gdbint.c,
gdbint.h, genio.c, genio.h, gscm.c, gscm.h, gsubr.c, gsubr.h,
hash.c, hash.h, hashtab.c, hashtab.h, init.c, ioext.c, ioext.h,
kw.c, kw.h, libguile.h, mallocs.c, mallocs.h, markers.c,
markers.h, mbstrings.c, mbstrings.h, numbers.c, numbers.h,
objprop.c, objprop.h, options.c, options.h, pairs.c, pairs.h,
ports.c, ports.h, posix.c, posix.h, print.c, print.h, procprop.c,
procprop.h, procs.c, procs.h, ramap.c, ramap.h, read.c, read.h,
root.c, scmsigs.c, scmsigs.h, sequences.c, sequences.h, simpos.c,
simpos.h, smob.c, socket.c, socket.h, srcprop.c, srcprop.h,
stackchk.c, stackchk.h, stime.c, stime.h, strings.c, strings.h,
strop.c, strop.h, strorder.c, strorder.h, strports.c, strports.h,
struct.c, struct.h, symbols.c, symbols.h, tag.c, tag.h, unif.c,
unif.h, variable.c, variable.h, vectors.c, vectors.h, version.c,
version.h, vports.c, vports.h, weaks.c, weaks.h: Use SCM_P to
declare functions with prototypes. (Patch thanks to Marius
Vollmer.)
1996-10-14 01:33:50 +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
|
|
|
|
|
|
|
|
|
|
#ifdef CCLO
|
1996-07-25 22:56:11 +00:00
|
|
|
|
SCM
|
1999-12-12 02:36:16 +00:00
|
|
|
|
scm_makcclo (SCM proc, long len)
|
1996-07-25 22:56:11 +00:00
|
|
|
|
{
|
2000-09-26 20:11:22 +00:00
|
|
|
|
scm_bits_t *base = scm_must_malloc (len * sizeof (scm_bits_t), "compiled-closure");
|
|
|
|
|
|
unsigned long i;
|
1996-07-25 22:56:11 +00:00
|
|
|
|
SCM s;
|
2000-09-26 20:11:22 +00:00
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < len; ++i)
|
|
|
|
|
|
base [i] = SCM_UNPACK (SCM_UNSPECIFIED);
|
|
|
|
|
|
|
1996-07-25 22:56:11 +00:00
|
|
|
|
SCM_NEWCELL (s);
|
|
|
|
|
|
SCM_DEFER_INTS;
|
2000-09-26 20:11:22 +00:00
|
|
|
|
SCM_SET_CCLO_BASE (s, base);
|
|
|
|
|
|
SCM_SET_CCLO_LENGTH (s, len);
|
|
|
|
|
|
SCM_SET_CCLO_SUBR (s, proc);
|
1996-07-25 22:56:11 +00:00
|
|
|
|
SCM_ALLOW_INTS;
|
|
|
|
|
|
return s;
|
|
|
|
|
|
}
|
1997-03-08 14:45:16 +00:00
|
|
|
|
|
|
|
|
|
|
/* Undocumented debugging procedure */
|
|
|
|
|
|
#ifdef GUILE_DEBUG
|
2000-01-05 19:05:23 +00:00
|
|
|
|
SCM_DEFINE (scm_make_cclo, "make-cclo", 2, 0, 0,
|
1999-12-12 02:36:16 +00:00
|
|
|
|
(SCM proc, SCM len),
|
|
|
|
|
|
"")
|
|
|
|
|
|
#define FUNC_NAME s_scm_make_cclo
|
1997-03-08 14:45:16 +00:00
|
|
|
|
{
|
|
|
|
|
|
return scm_makcclo (proc, SCM_INUM (len));
|
|
|
|
|
|
}
|
1999-12-12 02:36:16 +00:00
|
|
|
|
#undef FUNC_NAME
|
1997-03-08 14:45:16 +00:00
|
|
|
|
#endif
|
1996-07-25 22:56:11 +00:00
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2000-01-05 19:25:37 +00:00
|
|
|
|
SCM_DEFINE (scm_procedure_p, "procedure?", 1, 0, 0,
|
1999-12-12 02:36:16 +00:00
|
|
|
|
(SCM obj),
|
|
|
|
|
|
"")
|
|
|
|
|
|
#define FUNC_NAME s_scm_procedure_p
|
1996-07-25 22:56:11 +00:00
|
|
|
|
{
|
|
|
|
|
|
if (SCM_NIMP (obj))
|
|
|
|
|
|
switch (SCM_TYP7 (obj))
|
|
|
|
|
|
{
|
1998-11-21 17:01:48 +00:00
|
|
|
|
case scm_tcs_cons_gloc:
|
|
|
|
|
|
if (!SCM_I_OPERATORP (obj))
|
|
|
|
|
|
break;
|
1996-07-25 22:56:11 +00:00
|
|
|
|
case scm_tcs_closures:
|
|
|
|
|
|
case scm_tcs_subrs:
|
|
|
|
|
|
#ifdef CCLO
|
|
|
|
|
|
case scm_tc7_cclo:
|
|
|
|
|
|
#endif
|
* eval.c, procs.c, procs.h, procprop.c: Renamed getter ->
procedure throughout.
* procs.c (scm_procedure, scm_setter): Handle entity and operator
setter slots.
* procs.c, procs.h (SCM_PROCEDURE_WITH_SETTER_P, SCM_GETTER,
SCM_SETTER): New macros.
(scm_procedure_with_setter_p, scm_make_procedure_with_setter,
scm_getter, scm_setter): New procedures.
* procprop.c (scm_i_procedure_arity), procs.c (scm_thunk_p): Added
entry for scm_tc7_pws.
* procs.c (scm_procedure_p): Added case label for scm_tc7_pws.
1999-03-11 11:47:31 +00:00
|
|
|
|
case scm_tc7_pws:
|
1996-07-25 22:56:11 +00:00
|
|
|
|
return SCM_BOOL_T;
|
2000-08-25 02:26:22 +00:00
|
|
|
|
case scm_tc7_smob:
|
|
|
|
|
|
return SCM_BOOL (SCM_SMOB_DESCRIPTOR (obj).apply);
|
1996-07-25 22:56:11 +00:00
|
|
|
|
default:
|
|
|
|
|
|
return SCM_BOOL_F;
|
|
|
|
|
|
}
|
|
|
|
|
|
return SCM_BOOL_F;
|
|
|
|
|
|
}
|
1999-12-12 02:36:16 +00:00
|
|
|
|
#undef FUNC_NAME
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
2000-01-05 19:25:37 +00:00
|
|
|
|
SCM_DEFINE (scm_closure_p, "closure?", 1, 0, 0,
|
1999-12-12 02:36:16 +00:00
|
|
|
|
(SCM obj),
|
|
|
|
|
|
"")
|
|
|
|
|
|
#define FUNC_NAME s_scm_closure_p
|
1996-11-02 20:53:58 +00:00
|
|
|
|
{
|
1999-12-16 20:48:05 +00:00
|
|
|
|
return SCM_BOOL(SCM_CLOSUREP (obj));
|
1996-11-02 20:53:58 +00:00
|
|
|
|
}
|
1999-12-12 02:36:16 +00:00
|
|
|
|
#undef FUNC_NAME
|
1996-11-02 20:53:58 +00:00
|
|
|
|
|
2000-01-05 19:25:37 +00:00
|
|
|
|
SCM_DEFINE (scm_thunk_p, "thunk?", 1, 0, 0,
|
1999-12-12 02:36:16 +00:00
|
|
|
|
(SCM obj),
|
|
|
|
|
|
"")
|
|
|
|
|
|
#define FUNC_NAME s_scm_thunk_p
|
1996-10-05 16:50:00 +00:00
|
|
|
|
{
|
|
|
|
|
|
if (SCM_NIMP (obj))
|
* eval.c, procs.c, procs.h, procprop.c: Renamed getter ->
procedure throughout.
* procs.c (scm_procedure, scm_setter): Handle entity and operator
setter slots.
* procs.c, procs.h (SCM_PROCEDURE_WITH_SETTER_P, SCM_GETTER,
SCM_SETTER): New macros.
(scm_procedure_with_setter_p, scm_make_procedure_with_setter,
scm_getter, scm_setter): New procedures.
* procprop.c (scm_i_procedure_arity), procs.c (scm_thunk_p): Added
entry for scm_tc7_pws.
* procs.c (scm_procedure_p): Added case label for scm_tc7_pws.
1999-03-11 11:47:31 +00:00
|
|
|
|
{
|
|
|
|
|
|
again:
|
|
|
|
|
|
switch (SCM_TYP7 (obj))
|
|
|
|
|
|
{
|
|
|
|
|
|
case scm_tcs_closures:
|
|
|
|
|
|
if (SCM_NULLP (SCM_CAR (SCM_CODE (obj))))
|
|
|
|
|
|
return SCM_BOOL_T;
|
|
|
|
|
|
case scm_tc7_subr_0:
|
|
|
|
|
|
case scm_tc7_subr_1o:
|
|
|
|
|
|
case scm_tc7_lsubr:
|
|
|
|
|
|
case scm_tc7_rpsubr:
|
|
|
|
|
|
case scm_tc7_asubr:
|
1996-10-05 16:50:00 +00:00
|
|
|
|
#ifdef CCLO
|
* eval.c, procs.c, procs.h, procprop.c: Renamed getter ->
procedure throughout.
* procs.c (scm_procedure, scm_setter): Handle entity and operator
setter slots.
* procs.c, procs.h (SCM_PROCEDURE_WITH_SETTER_P, SCM_GETTER,
SCM_SETTER): New macros.
(scm_procedure_with_setter_p, scm_make_procedure_with_setter,
scm_getter, scm_setter): New procedures.
* procprop.c (scm_i_procedure_arity), procs.c (scm_thunk_p): Added
entry for scm_tc7_pws.
* procs.c (scm_procedure_p): Added case label for scm_tc7_pws.
1999-03-11 11:47:31 +00:00
|
|
|
|
case scm_tc7_cclo:
|
1996-10-05 16:50:00 +00:00
|
|
|
|
#endif
|
* eval.c, procs.c, procs.h, procprop.c: Renamed getter ->
procedure throughout.
* procs.c (scm_procedure, scm_setter): Handle entity and operator
setter slots.
* procs.c, procs.h (SCM_PROCEDURE_WITH_SETTER_P, SCM_GETTER,
SCM_SETTER): New macros.
(scm_procedure_with_setter_p, scm_make_procedure_with_setter,
scm_getter, scm_setter): New procedures.
* procprop.c (scm_i_procedure_arity), procs.c (scm_thunk_p): Added
entry for scm_tc7_pws.
* procs.c (scm_procedure_p): Added case label for scm_tc7_pws.
1999-03-11 11:47:31 +00:00
|
|
|
|
return SCM_BOOL_T;
|
|
|
|
|
|
case scm_tc7_pws:
|
|
|
|
|
|
obj = SCM_PROCEDURE (obj);
|
|
|
|
|
|
goto again;
|
|
|
|
|
|
default:
|
|
|
|
|
|
;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
1996-10-05 16:50:00 +00:00
|
|
|
|
return SCM_BOOL_F;
|
|
|
|
|
|
}
|
1999-12-12 02:36:16 +00:00
|
|
|
|
#undef FUNC_NAME
|
1996-10-05 16:50:00 +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
|
|
|
|
/* Only used internally. */
|
|
|
|
|
|
int
|
|
|
|
|
|
scm_subr_p (SCM obj)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (SCM_NIMP (obj))
|
|
|
|
|
|
switch (SCM_TYP7 (obj))
|
|
|
|
|
|
{
|
|
|
|
|
|
case scm_tcs_subrs:
|
|
|
|
|
|
return 1;
|
|
|
|
|
|
default:
|
|
|
|
|
|
;
|
|
|
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2000-01-05 19:25:37 +00:00
|
|
|
|
SCM_DEFINE (scm_procedure_documentation, "procedure-documentation", 1, 0, 0,
|
1999-12-12 02:36:16 +00:00
|
|
|
|
(SCM proc),
|
* alist.c, chars.c, debug.c, dynl.c, dynwind.c, error.c, eval.c,
evalext.c, filesys.c, gc.c, hash.c, hashtab.c, ioext.c,
keywords.c, list.c, load.c, macros.c, net_db.c, numbers.c,
objprop.c, ports.c, posix.c, print.c, procprop.c, procs.c,
ramap.c, regex-posix.c, root.c, scmsigs.c, simpos.c, socket.c,
stacks.c, stime.c, strings.c, strop.c, strports.c, struct.c,
symbols.c, throw.c, unif.c, vectors.c, version.c, vports.c,
weaks.c: Converted docstrings to ANSI C format.
2000-01-18 11:24:03 +00:00
|
|
|
|
"Return the documentation string associated with @code{proc}. By\n"
|
|
|
|
|
|
"convention, if a procedure contains more than one expression and the\n"
|
|
|
|
|
|
"first expression is a string constant, that string is assumed to contain\n"
|
|
|
|
|
|
"documentation for that procedure.")
|
1999-12-12 02:36:16 +00:00
|
|
|
|
#define FUNC_NAME s_scm_procedure_documentation
|
1998-10-31 13:07:16 +00:00
|
|
|
|
{
|
|
|
|
|
|
SCM code;
|
* use an applicable SMOB to represent continuations, instead of a
custom tc7 type. This will make it easier to support R5RS
multiple value continuations, without the use of a Scheme-level
wrapper.
* continuations.c (scm_tc16_continuation, continuation_mark,
continuation_free, continuation_print, continuation_apply):
new SMOB support.
(scm_make_continuation): new procedure, replaces scm_make_cont
with a different interface.
(copy_stack_and_call, scm_dynthrow, scm_init_continuations): rewritten.
(CHEAP_CONTINUATIONS): removed non-working code completely.
(scm_call_continuation): removed.
* continuations.h (struct scm_contregs): add num_stack_items and
stack fields. previously stack was stored following this struct:
use a tail array instead.
(SCM_CONTINUATIONP): new macro.
(SCM_CONTINUATION_LENGTH, SCM_SET_CONTINUATION_LENGTH):
rewritten.
(SCM_SET_CONTREGS): removed.
* tags.h: removed scm_tc7_contin (was tag 61).
* debug.c, gc.c, hash.c, print.c, procprop.c, procs.c:
removed scm_tc7_contin support.
* eval.c: use scm_make_continuation instead of scm_make_cont.
don't set jump buffers here. remove scm_tc7_contin support.
* init.c, root.c: create SMOB continuation for rootcont instead
of scm_tc7_contin. call scm_init_continuations before
scm_init_root.
* root.c: remove support for static jmpbuf. It's not used by
default and I broke it. create SMOB continuation for rootcont.
* stacks.c: use SCM_CONTINUATIONP.
2000-11-25 16:58:25 +00:00
|
|
|
|
SCM_ASSERT (SCM_EQ_P (scm_procedure_p (proc), SCM_BOOL_T) && SCM_NIMP (proc),
|
2000-06-05 11:39:46 +00:00
|
|
|
|
proc, SCM_ARG1, FUNC_NAME);
|
1998-10-31 13:07:16 +00:00
|
|
|
|
switch (SCM_TYP7 (proc))
|
|
|
|
|
|
{
|
|
|
|
|
|
case scm_tcs_closures:
|
|
|
|
|
|
code = SCM_CDR (SCM_CODE (proc));
|
|
|
|
|
|
if (SCM_IMP (SCM_CDR (code)))
|
|
|
|
|
|
return SCM_BOOL_F;
|
|
|
|
|
|
code = SCM_CAR (code);
|
|
|
|
|
|
if (SCM_IMP (code))
|
|
|
|
|
|
return SCM_BOOL_F;
|
|
|
|
|
|
if (SCM_STRINGP (code))
|
|
|
|
|
|
return code;
|
|
|
|
|
|
default:
|
|
|
|
|
|
return SCM_BOOL_F;
|
|
|
|
|
|
/*
|
|
|
|
|
|
case scm_tcs_subrs:
|
|
|
|
|
|
#ifdef CCLO
|
|
|
|
|
|
case scm_tc7_cclo:
|
|
|
|
|
|
#endif
|
|
|
|
|
|
*/
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
1999-12-12 02:36:16 +00:00
|
|
|
|
#undef FUNC_NAME
|
1998-10-31 13:07:16 +00:00
|
|
|
|
|
1996-07-25 22:56:11 +00:00
|
|
|
|
|
* eval.c, procs.c, procs.h, procprop.c: Renamed getter ->
procedure throughout.
* procs.c (scm_procedure, scm_setter): Handle entity and operator
setter slots.
* procs.c, procs.h (SCM_PROCEDURE_WITH_SETTER_P, SCM_GETTER,
SCM_SETTER): New macros.
(scm_procedure_with_setter_p, scm_make_procedure_with_setter,
scm_getter, scm_setter): New procedures.
* procprop.c (scm_i_procedure_arity), procs.c (scm_thunk_p): Added
entry for scm_tc7_pws.
* procs.c (scm_procedure_p): Added case label for scm_tc7_pws.
1999-03-11 11:47:31 +00:00
|
|
|
|
/* Procedure-with-setter
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
2000-01-05 19:05:23 +00:00
|
|
|
|
SCM_DEFINE (scm_procedure_with_setter_p, "procedure-with-setter?", 1, 0, 0,
|
1999-12-12 02:36:16 +00:00
|
|
|
|
(SCM obj),
|
* alist.c, chars.c, debug.c, dynl.c, dynwind.c, error.c, eval.c,
evalext.c, filesys.c, gc.c, hash.c, hashtab.c, ioext.c,
keywords.c, list.c, load.c, macros.c, net_db.c, numbers.c,
objprop.c, ports.c, posix.c, print.c, procprop.c, procs.c,
ramap.c, regex-posix.c, root.c, scmsigs.c, simpos.c, socket.c,
stacks.c, stime.c, strings.c, strop.c, strports.c, struct.c,
symbols.c, throw.c, unif.c, vectors.c, version.c, vports.c,
weaks.c: Converted docstrings to ANSI C format.
2000-01-18 11:24:03 +00:00
|
|
|
|
"")
|
1999-12-12 02:36:16 +00:00
|
|
|
|
#define FUNC_NAME s_scm_procedure_with_setter_p
|
* eval.c, procs.c, procs.h, procprop.c: Renamed getter ->
procedure throughout.
* procs.c (scm_procedure, scm_setter): Handle entity and operator
setter slots.
* procs.c, procs.h (SCM_PROCEDURE_WITH_SETTER_P, SCM_GETTER,
SCM_SETTER): New macros.
(scm_procedure_with_setter_p, scm_make_procedure_with_setter,
scm_getter, scm_setter): New procedures.
* procprop.c (scm_i_procedure_arity), procs.c (scm_thunk_p): Added
entry for scm_tc7_pws.
* procs.c (scm_procedure_p): Added case label for scm_tc7_pws.
1999-03-11 11:47:31 +00:00
|
|
|
|
{
|
1999-12-16 20:48:05 +00:00
|
|
|
|
return SCM_BOOL(SCM_PROCEDURE_WITH_SETTER_P (obj));
|
* eval.c, procs.c, procs.h, procprop.c: Renamed getter ->
procedure throughout.
* procs.c (scm_procedure, scm_setter): Handle entity and operator
setter slots.
* procs.c, procs.h (SCM_PROCEDURE_WITH_SETTER_P, SCM_GETTER,
SCM_SETTER): New macros.
(scm_procedure_with_setter_p, scm_make_procedure_with_setter,
scm_getter, scm_setter): New procedures.
* procprop.c (scm_i_procedure_arity), procs.c (scm_thunk_p): Added
entry for scm_tc7_pws.
* procs.c (scm_procedure_p): Added case label for scm_tc7_pws.
1999-03-11 11:47:31 +00:00
|
|
|
|
}
|
1999-12-12 02:36:16 +00:00
|
|
|
|
#undef FUNC_NAME
|
* eval.c, procs.c, procs.h, procprop.c: Renamed getter ->
procedure throughout.
* procs.c (scm_procedure, scm_setter): Handle entity and operator
setter slots.
* procs.c, procs.h (SCM_PROCEDURE_WITH_SETTER_P, SCM_GETTER,
SCM_SETTER): New macros.
(scm_procedure_with_setter_p, scm_make_procedure_with_setter,
scm_getter, scm_setter): New procedures.
* procprop.c (scm_i_procedure_arity), procs.c (scm_thunk_p): Added
entry for scm_tc7_pws.
* procs.c (scm_procedure_p): Added case label for scm_tc7_pws.
1999-03-11 11:47:31 +00:00
|
|
|
|
|
2000-01-05 19:05:23 +00:00
|
|
|
|
SCM_DEFINE (scm_make_procedure_with_setter, "make-procedure-with-setter", 2, 0, 0,
|
1999-12-12 02:36:16 +00:00
|
|
|
|
(SCM procedure, SCM setter),
|
* alist.c, chars.c, debug.c, dynl.c, dynwind.c, error.c, eval.c,
evalext.c, filesys.c, gc.c, hash.c, hashtab.c, ioext.c,
keywords.c, list.c, load.c, macros.c, net_db.c, numbers.c,
objprop.c, ports.c, posix.c, print.c, procprop.c, procs.c,
ramap.c, regex-posix.c, root.c, scmsigs.c, simpos.c, socket.c,
stacks.c, stime.c, strings.c, strop.c, strports.c, struct.c,
symbols.c, throw.c, unif.c, vectors.c, version.c, vports.c,
weaks.c: Converted docstrings to ANSI C format.
2000-01-18 11:24:03 +00:00
|
|
|
|
"")
|
1999-12-12 02:36:16 +00:00
|
|
|
|
#define FUNC_NAME s_scm_make_procedure_with_setter
|
* eval.c, procs.c, procs.h, procprop.c: Renamed getter ->
procedure throughout.
* procs.c (scm_procedure, scm_setter): Handle entity and operator
setter slots.
* procs.c, procs.h (SCM_PROCEDURE_WITH_SETTER_P, SCM_GETTER,
SCM_SETTER): New macros.
(scm_procedure_with_setter_p, scm_make_procedure_with_setter,
scm_getter, scm_setter): New procedures.
* procprop.c (scm_i_procedure_arity), procs.c (scm_thunk_p): Added
entry for scm_tc7_pws.
* procs.c (scm_procedure_p): Added case label for scm_tc7_pws.
1999-03-11 11:47:31 +00:00
|
|
|
|
{
|
|
|
|
|
|
SCM z;
|
2000-03-14 06:41:56 +00:00
|
|
|
|
SCM_VALIDATE_PROC (1, procedure);
|
|
|
|
|
|
SCM_VALIDATE_PROC (2, setter);
|
|
|
|
|
|
SCM_NEWCELL2 (z);
|
* eval.c, procs.c, procs.h, procprop.c: Renamed getter ->
procedure throughout.
* procs.c (scm_procedure, scm_setter): Handle entity and operator
setter slots.
* procs.c, procs.h (SCM_PROCEDURE_WITH_SETTER_P, SCM_GETTER,
SCM_SETTER): New macros.
(scm_procedure_with_setter_p, scm_make_procedure_with_setter,
scm_getter, scm_setter): New procedures.
* procprop.c (scm_i_procedure_arity), procs.c (scm_thunk_p): Added
entry for scm_tc7_pws.
* procs.c (scm_procedure_p): Added case label for scm_tc7_pws.
1999-03-11 11:47:31 +00:00
|
|
|
|
SCM_ENTER_A_SECTION;
|
2000-03-24 08:55:14 +00:00
|
|
|
|
SCM_SET_CELL_OBJECT_1 (z, procedure);
|
|
|
|
|
|
SCM_SET_CELL_OBJECT_2 (z, setter);
|
2000-04-03 08:47:51 +00:00
|
|
|
|
SCM_SET_CELL_TYPE (z, scm_tc7_pws);
|
* eval.c, procs.c, procs.h, procprop.c: Renamed getter ->
procedure throughout.
* procs.c (scm_procedure, scm_setter): Handle entity and operator
setter slots.
* procs.c, procs.h (SCM_PROCEDURE_WITH_SETTER_P, SCM_GETTER,
SCM_SETTER): New macros.
(scm_procedure_with_setter_p, scm_make_procedure_with_setter,
scm_getter, scm_setter): New procedures.
* procprop.c (scm_i_procedure_arity), procs.c (scm_thunk_p): Added
entry for scm_tc7_pws.
* procs.c (scm_procedure_p): Added case label for scm_tc7_pws.
1999-03-11 11:47:31 +00:00
|
|
|
|
SCM_EXIT_A_SECTION;
|
|
|
|
|
|
return z;
|
|
|
|
|
|
}
|
1999-12-12 02:36:16 +00:00
|
|
|
|
#undef FUNC_NAME
|
* eval.c, procs.c, procs.h, procprop.c: Renamed getter ->
procedure throughout.
* procs.c (scm_procedure, scm_setter): Handle entity and operator
setter slots.
* procs.c, procs.h (SCM_PROCEDURE_WITH_SETTER_P, SCM_GETTER,
SCM_SETTER): New macros.
(scm_procedure_with_setter_p, scm_make_procedure_with_setter,
scm_getter, scm_setter): New procedures.
* procprop.c (scm_i_procedure_arity), procs.c (scm_thunk_p): Added
entry for scm_tc7_pws.
* procs.c (scm_procedure_p): Added case label for scm_tc7_pws.
1999-03-11 11:47:31 +00:00
|
|
|
|
|
2000-01-05 19:05:23 +00:00
|
|
|
|
SCM_DEFINE (scm_procedure, "procedure", 1, 0, 0,
|
1999-12-12 02:36:16 +00:00
|
|
|
|
(SCM proc),
|
* alist.c, chars.c, debug.c, dynl.c, dynwind.c, error.c, eval.c,
evalext.c, filesys.c, gc.c, hash.c, hashtab.c, ioext.c,
keywords.c, list.c, load.c, macros.c, net_db.c, numbers.c,
objprop.c, ports.c, posix.c, print.c, procprop.c, procs.c,
ramap.c, regex-posix.c, root.c, scmsigs.c, simpos.c, socket.c,
stacks.c, stime.c, strings.c, strop.c, strports.c, struct.c,
symbols.c, throw.c, unif.c, vectors.c, version.c, vports.c,
weaks.c: Converted docstrings to ANSI C format.
2000-01-18 11:24:03 +00:00
|
|
|
|
"")
|
1999-12-12 02:36:16 +00:00
|
|
|
|
#define FUNC_NAME s_scm_procedure
|
* eval.c, procs.c, procs.h, procprop.c: Renamed getter ->
procedure throughout.
* procs.c (scm_procedure, scm_setter): Handle entity and operator
setter slots.
* procs.c, procs.h (SCM_PROCEDURE_WITH_SETTER_P, SCM_GETTER,
SCM_SETTER): New macros.
(scm_procedure_with_setter_p, scm_make_procedure_with_setter,
scm_getter, scm_setter): New procedures.
* procprop.c (scm_i_procedure_arity), procs.c (scm_thunk_p): Added
entry for scm_tc7_pws.
* procs.c (scm_procedure_p): Added case label for scm_tc7_pws.
1999-03-11 11:47:31 +00:00
|
|
|
|
{
|
2000-03-14 06:41:56 +00:00
|
|
|
|
SCM_VALIDATE_NIM (1, proc);
|
* eval.c, procs.c, procs.h, procprop.c: Renamed getter ->
procedure throughout.
* procs.c (scm_procedure, scm_setter): Handle entity and operator
setter slots.
* procs.c, procs.h (SCM_PROCEDURE_WITH_SETTER_P, SCM_GETTER,
SCM_SETTER): New macros.
(scm_procedure_with_setter_p, scm_make_procedure_with_setter,
scm_getter, scm_setter): New procedures.
* procprop.c (scm_i_procedure_arity), procs.c (scm_thunk_p): Added
entry for scm_tc7_pws.
* procs.c (scm_procedure_p): Added case label for scm_tc7_pws.
1999-03-11 11:47:31 +00:00
|
|
|
|
if (SCM_PROCEDURE_WITH_SETTER_P (proc))
|
|
|
|
|
|
return SCM_PROCEDURE (proc);
|
|
|
|
|
|
else if (SCM_STRUCTP (proc))
|
|
|
|
|
|
{
|
1999-12-12 02:36:16 +00:00
|
|
|
|
SCM_ASSERT (SCM_I_OPERATORP (proc), proc, SCM_ARG1, FUNC_NAME);
|
* eval.c, procs.c, procs.h, procprop.c: Renamed getter ->
procedure throughout.
* procs.c (scm_procedure, scm_setter): Handle entity and operator
setter slots.
* procs.c, procs.h (SCM_PROCEDURE_WITH_SETTER_P, SCM_GETTER,
SCM_SETTER): New macros.
(scm_procedure_with_setter_p, scm_make_procedure_with_setter,
scm_getter, scm_setter): New procedures.
* procprop.c (scm_i_procedure_arity), procs.c (scm_thunk_p): Added
entry for scm_tc7_pws.
* procs.c (scm_procedure_p): Added case label for scm_tc7_pws.
1999-03-11 11:47:31 +00:00
|
|
|
|
return proc;
|
|
|
|
|
|
}
|
1999-12-12 02:36:16 +00:00
|
|
|
|
SCM_WRONG_TYPE_ARG (1, proc);
|
2000-04-04 12:13:41 +00:00
|
|
|
|
return SCM_BOOL_F; /* not reached */
|
* eval.c, procs.c, procs.h, procprop.c: Renamed getter ->
procedure throughout.
* procs.c (scm_procedure, scm_setter): Handle entity and operator
setter slots.
* procs.c, procs.h (SCM_PROCEDURE_WITH_SETTER_P, SCM_GETTER,
SCM_SETTER): New macros.
(scm_procedure_with_setter_p, scm_make_procedure_with_setter,
scm_getter, scm_setter): New procedures.
* procprop.c (scm_i_procedure_arity), procs.c (scm_thunk_p): Added
entry for scm_tc7_pws.
* procs.c (scm_procedure_p): Added case label for scm_tc7_pws.
1999-03-11 11:47:31 +00:00
|
|
|
|
}
|
1999-12-12 02:36:16 +00:00
|
|
|
|
#undef FUNC_NAME
|
* eval.c, procs.c, procs.h, procprop.c: Renamed getter ->
procedure throughout.
* procs.c (scm_procedure, scm_setter): Handle entity and operator
setter slots.
* procs.c, procs.h (SCM_PROCEDURE_WITH_SETTER_P, SCM_GETTER,
SCM_SETTER): New macros.
(scm_procedure_with_setter_p, scm_make_procedure_with_setter,
scm_getter, scm_setter): New procedures.
* procprop.c (scm_i_procedure_arity), procs.c (scm_thunk_p): Added
entry for scm_tc7_pws.
* procs.c (scm_procedure_p): Added case label for scm_tc7_pws.
1999-03-11 11:47:31 +00:00
|
|
|
|
|
1999-08-29 14:22:44 +00:00
|
|
|
|
SCM_GPROC (s_setter, "setter", 1, 0, 0, scm_setter, g_setter);
|
* eval.c, procs.c, procs.h, procprop.c: Renamed getter ->
procedure throughout.
* procs.c (scm_procedure, scm_setter): Handle entity and operator
setter slots.
* procs.c, procs.h (SCM_PROCEDURE_WITH_SETTER_P, SCM_GETTER,
SCM_SETTER): New macros.
(scm_procedure_with_setter_p, scm_make_procedure_with_setter,
scm_getter, scm_setter): New procedures.
* procprop.c (scm_i_procedure_arity), procs.c (scm_thunk_p): Added
entry for scm_tc7_pws.
* procs.c (scm_procedure_p): Added case label for scm_tc7_pws.
1999-03-11 11:47:31 +00:00
|
|
|
|
|
|
|
|
|
|
SCM
|
|
|
|
|
|
scm_setter (SCM proc)
|
|
|
|
|
|
{
|
1999-08-29 14:22:44 +00:00
|
|
|
|
SCM_GASSERT1 (SCM_NIMP (proc), g_setter, proc, SCM_ARG1, s_setter);
|
* eval.c, procs.c, procs.h, procprop.c: Renamed getter ->
procedure throughout.
* procs.c (scm_procedure, scm_setter): Handle entity and operator
setter slots.
* procs.c, procs.h (SCM_PROCEDURE_WITH_SETTER_P, SCM_GETTER,
SCM_SETTER): New macros.
(scm_procedure_with_setter_p, scm_make_procedure_with_setter,
scm_getter, scm_setter): New procedures.
* procprop.c (scm_i_procedure_arity), procs.c (scm_thunk_p): Added
entry for scm_tc7_pws.
* procs.c (scm_procedure_p): Added case label for scm_tc7_pws.
1999-03-11 11:47:31 +00:00
|
|
|
|
if (SCM_PROCEDURE_WITH_SETTER_P (proc))
|
|
|
|
|
|
return SCM_SETTER (proc);
|
|
|
|
|
|
else if (SCM_STRUCTP (proc))
|
|
|
|
|
|
{
|
1999-09-09 21:29:25 +00:00
|
|
|
|
SCM setter;
|
1999-08-29 14:22:44 +00:00
|
|
|
|
SCM_GASSERT1 (SCM_I_OPERATORP (proc),
|
|
|
|
|
|
g_setter, proc, SCM_ARG1, s_setter);
|
1999-09-09 21:29:25 +00:00
|
|
|
|
setter = (SCM_I_ENTITYP (proc)
|
|
|
|
|
|
? SCM_ENTITY_SETTER (proc)
|
|
|
|
|
|
: SCM_OPERATOR_SETTER (proc));
|
|
|
|
|
|
if (SCM_NIMP (setter))
|
|
|
|
|
|
return setter;
|
|
|
|
|
|
/* fall through */
|
* eval.c, procs.c, procs.h, procprop.c: Renamed getter ->
procedure throughout.
* procs.c (scm_procedure, scm_setter): Handle entity and operator
setter slots.
* procs.c, procs.h (SCM_PROCEDURE_WITH_SETTER_P, SCM_GETTER,
SCM_SETTER): New macros.
(scm_procedure_with_setter_p, scm_make_procedure_with_setter,
scm_getter, scm_setter): New procedures.
* procprop.c (scm_i_procedure_arity), procs.c (scm_thunk_p): Added
entry for scm_tc7_pws.
* procs.c (scm_procedure_p): Added case label for scm_tc7_pws.
1999-03-11 11:47:31 +00:00
|
|
|
|
}
|
1999-08-29 14:22:44 +00:00
|
|
|
|
SCM_WTA_DISPATCH_1 (g_setter, proc, SCM_ARG1, s_setter);
|
2000-06-12 21:26:35 +00:00
|
|
|
|
return SCM_BOOL_F; /* not reached */
|
* eval.c, procs.c, procs.h, procprop.c: Renamed getter ->
procedure throughout.
* procs.c (scm_procedure, scm_setter): Handle entity and operator
setter slots.
* procs.c, procs.h (SCM_PROCEDURE_WITH_SETTER_P, SCM_GETTER,
SCM_SETTER): New macros.
(scm_procedure_with_setter_p, scm_make_procedure_with_setter,
scm_getter, scm_setter): New procedures.
* procprop.c (scm_i_procedure_arity), procs.c (scm_thunk_p): Added
entry for scm_tc7_pws.
* procs.c (scm_procedure_p): Added case label for scm_tc7_pws.
1999-03-11 11:47:31 +00:00
|
|
|
|
}
|
* __scm.h, alist.c, alist.h, append.c, append.h, appinit.c,
arbiters.c, arbiters.h, async.c, async.h, boolean.c, boolean.h,
chars.c, chars.h, continuations.c, continuations.h, debug.c,
debug.h, dynwind.c, dynwind.h, eq.c, eq.h, error.c, eval.c,
eval.h, extchrs.c, extchrs.h, fdsocket.c, fdsocket.h, filesys.c,
filesys.h, fports.c, fports.h, gc.c, gdb_interface.h, gdbint.c,
gdbint.h, genio.c, genio.h, gscm.c, gscm.h, gsubr.c, gsubr.h,
hash.c, hash.h, hashtab.c, hashtab.h, init.c, ioext.c, ioext.h,
kw.c, kw.h, libguile.h, mallocs.c, mallocs.h, markers.c,
markers.h, mbstrings.c, mbstrings.h, numbers.c, numbers.h,
objprop.c, objprop.h, options.c, options.h, pairs.c, pairs.h,
ports.c, ports.h, posix.c, posix.h, print.c, print.h, procprop.c,
procprop.h, procs.c, procs.h, ramap.c, ramap.h, read.c, read.h,
root.c, scmsigs.c, scmsigs.h, sequences.c, sequences.h, simpos.c,
simpos.h, smob.c, socket.c, socket.h, srcprop.c, srcprop.h,
stackchk.c, stackchk.h, stime.c, stime.h, strings.c, strings.h,
strop.c, strop.h, strorder.c, strorder.h, strports.c, strports.h,
struct.c, struct.h, symbols.c, symbols.h, tag.c, tag.h, unif.c,
unif.h, variable.c, variable.h, vectors.c, vectors.h, version.c,
version.h, vports.c, vports.h, weaks.c, weaks.h: Use SCM_P to
declare functions with prototypes. (Patch thanks to Marius
Vollmer.)
1996-10-14 01:33:50 +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
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
|
scm_init_subr_table ()
|
|
|
|
|
|
{
|
|
|
|
|
|
scm_subr_table
|
|
|
|
|
|
= ((scm_subr_entry *)
|
|
|
|
|
|
scm_must_malloc (sizeof (scm_subr_entry) * scm_subr_table_room,
|
|
|
|
|
|
"scm_subr_table"));
|
|
|
|
|
|
}
|
* __scm.h, alist.c, alist.h, append.c, append.h, appinit.c,
arbiters.c, arbiters.h, async.c, async.h, boolean.c, boolean.h,
chars.c, chars.h, continuations.c, continuations.h, debug.c,
debug.h, dynwind.c, dynwind.h, eq.c, eq.h, error.c, eval.c,
eval.h, extchrs.c, extchrs.h, fdsocket.c, fdsocket.h, filesys.c,
filesys.h, fports.c, fports.h, gc.c, gdb_interface.h, gdbint.c,
gdbint.h, genio.c, genio.h, gscm.c, gscm.h, gsubr.c, gsubr.h,
hash.c, hash.h, hashtab.c, hashtab.h, init.c, ioext.c, ioext.h,
kw.c, kw.h, libguile.h, mallocs.c, mallocs.h, markers.c,
markers.h, mbstrings.c, mbstrings.h, numbers.c, numbers.h,
objprop.c, objprop.h, options.c, options.h, pairs.c, pairs.h,
ports.c, ports.h, posix.c, posix.h, print.c, print.h, procprop.c,
procprop.h, procs.c, procs.h, ramap.c, ramap.h, read.c, read.h,
root.c, scmsigs.c, scmsigs.h, sequences.c, sequences.h, simpos.c,
simpos.h, smob.c, socket.c, socket.h, srcprop.c, srcprop.h,
stackchk.c, stackchk.h, stime.c, stime.h, strings.c, strings.h,
strop.c, strop.h, strorder.c, strorder.h, strports.c, strports.h,
struct.c, struct.h, symbols.c, symbols.h, tag.c, tag.h, unif.c,
unif.h, variable.c, variable.h, vectors.c, vectors.h, version.c,
version.h, vports.c, vports.h, weaks.c, weaks.h: Use SCM_P to
declare functions with prototypes. (Patch thanks to Marius
Vollmer.)
1996-10-14 01:33:50 +00:00
|
|
|
|
|
1996-07-25 22:56:11 +00:00
|
|
|
|
void
|
|
|
|
|
|
scm_init_procs ()
|
|
|
|
|
|
{
|
* alist.c, arbiters.c, async.c, backtrace.c, boolean.c, chars.c,
continuations.c, debug-malloc.c, debug.c, dynl.c, dynwind.c,
environments.c, eq.c, error.c, eval.c, evalext.c, feature.c,
filesys.c, fluids.c, fports.c, gc.c, goops.c, guardians.c, hash.c,
hashtab.c, hooks.c, ioext.c, iselect.c, keywords.c, lang.c,
list.c, load.c, macros.c, modules.c, net_db.c, numbers.c,
objects.c, objprop.c, options.c, pairs.c, ports.c, posix.c,
print.c, procprop.c, procs.c, properties.c, ramap.c, random.c,
read.c, regex-posix.c, root.c, scmsigs.c, script.c, simpos.c,
socket.c, sort.c, srcprop.c, stackchk.c, stacks.c, stime.c,
strings.c, strop.c, strorder.c, strports.c, struct.c, symbols.c,
tag.c, threads.c, throw.c, unif.c, variable.c, vectors.c,
version.c, vports.c, weaks.c: Makes sure the snarfer output
inclusion is disabled when the snarfer is run on the file. Thanks
to Lars J. Aas!
* Makefile.am: Install guile-procedures.txt in version-specific
directory to enable multiple installed guile versions. Suggested
by Karl M. Hegbloom <karlheg@debian.org, patch by Matthias Koeppe.
2000-11-17 16:25:05 +00:00
|
|
|
|
#ifndef SCM_MAGIC_SNARFER
|
2000-04-21 14:16:44 +00:00
|
|
|
|
#include "libguile/procs.x"
|
* alist.c, arbiters.c, async.c, backtrace.c, boolean.c, chars.c,
continuations.c, debug-malloc.c, debug.c, dynl.c, dynwind.c,
environments.c, eq.c, error.c, eval.c, evalext.c, feature.c,
filesys.c, fluids.c, fports.c, gc.c, goops.c, guardians.c, hash.c,
hashtab.c, hooks.c, ioext.c, iselect.c, keywords.c, lang.c,
list.c, load.c, macros.c, modules.c, net_db.c, numbers.c,
objects.c, objprop.c, options.c, pairs.c, ports.c, posix.c,
print.c, procprop.c, procs.c, properties.c, ramap.c, random.c,
read.c, regex-posix.c, root.c, scmsigs.c, script.c, simpos.c,
socket.c, sort.c, srcprop.c, stackchk.c, stacks.c, stime.c,
strings.c, strop.c, strorder.c, strports.c, struct.c, symbols.c,
tag.c, threads.c, throw.c, unif.c, variable.c, vectors.c,
version.c, vports.c, weaks.c: Makes sure the snarfer output
inclusion is disabled when the snarfer is run on the file. Thanks
to Lars J. Aas!
* Makefile.am: Install guile-procedures.txt in version-specific
directory to enable multiple installed guile versions. Suggested
by Karl M. Hegbloom <karlheg@debian.org, patch by Matthias Koeppe.
2000-11-17 16:25:05 +00:00
|
|
|
|
#endif
|
1996-07-25 22:56:11 +00:00
|
|
|
|
}
|
2000-03-19 19:01:16 +00:00
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
Local Variables:
|
|
|
|
|
|
c-file-style: "gnu"
|
|
|
|
|
|
End:
|
|
|
|
|
|
*/
|