summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libguile/alist.c1
-rw-r--r--libguile/array-map.c1
-rw-r--r--libguile/arrays.c1
-rw-r--r--libguile/async.c1
-rw-r--r--libguile/atomic.c1
-rw-r--r--libguile/backtrace.c1
-rw-r--r--libguile/bitvectors.c1
-rw-r--r--libguile/boolean.c1
-rw-r--r--libguile/bytevectors.c1
-rw-r--r--libguile/chars.c1
-rw-r--r--libguile/continuations.c1
-rw-r--r--libguile/control.c1
-rw-r--r--libguile/debug-malloc.c1
-rw-r--r--libguile/debug.c1
-rw-r--r--libguile/deprecation.c1
-rw-r--r--libguile/dynl.c1
-rw-r--r--libguile/eq.c1
-rw-r--r--libguile/error.c1
-rw-r--r--libguile/error.h3
-rw-r--r--libguile/eval.c1
-rw-r--r--libguile/evalext.c1
-rw-r--r--libguile/expand.c1
-rw-r--r--libguile/extensions.c4
-rw-r--r--libguile/fdes-finalizers.c1
-rw-r--r--libguile/feature.c1
-rw-r--r--libguile/filesys.c1
-rw-r--r--libguile/finalizers.c1
-rw-r--r--libguile/fluids.c1
-rw-r--r--libguile/foreign-object.c1
-rw-r--r--libguile/foreign.c1
-rw-r--r--libguile/fports.c1
-rw-r--r--libguile/frames.c1
-rw-r--r--libguile/gc.c1
-rw-r--r--libguile/generalized-arrays.c1
-rw-r--r--libguile/generalized-vectors.c5
-rw-r--r--libguile/gettext.c1
-rw-r--r--libguile/gsubr.h76
-rw-r--r--libguile/guardians.c1
-rw-r--r--libguile/hash.c1
-rw-r--r--libguile/hashtab.c1
-rw-r--r--libguile/hooks.c1
-rw-r--r--libguile/i18n.c1
-rw-r--r--libguile/instructions.c1
-rw-r--r--libguile/intrinsics.c1
-rw-r--r--libguile/ioext.c1
-rw-r--r--libguile/keywords.c1
-rw-r--r--libguile/list.c1
-rw-r--r--libguile/load.c1
-rw-r--r--libguile/loader.c1
-rw-r--r--libguile/macros.c1
-rw-r--r--libguile/memoize.c1
-rw-r--r--libguile/modules.c1
-rw-r--r--libguile/net_db.c1
-rw-r--r--libguile/numbers.c1
-rw-r--r--libguile/objprop.c1
-rw-r--r--libguile/pairs.c2
-rw-r--r--libguile/poll.c1
-rw-r--r--libguile/ports.c1
-rw-r--r--libguile/posix.c1
-rw-r--r--libguile/print.c1
-rw-r--r--libguile/procs.c1
-rw-r--r--libguile/programs.c1
-rw-r--r--libguile/promises.c1
-rw-r--r--libguile/r6rs-ports.c1
-rw-r--r--libguile/random.c4
-rw-r--r--libguile/rdelim.c1
-rw-r--r--libguile/read.c1
-rw-r--r--libguile/regex-posix.c1
-rw-r--r--libguile/rw.c1
-rw-r--r--libguile/scmsigs.c1
-rw-r--r--libguile/simpos.c1
-rw-r--r--libguile/smob.c1
-rw-r--r--libguile/snarf.h69
-rw-r--r--libguile/socket.c1
-rw-r--r--libguile/sort.c1
-rw-r--r--libguile/srcprop.c1
-rw-r--r--libguile/srfi-1.c1
-rw-r--r--libguile/srfi-13.c1
-rw-r--r--libguile/srfi-14.c1
-rw-r--r--libguile/srfi-4.c1
-rw-r--r--libguile/srfi-60.c1
-rw-r--r--libguile/stackchk.c1
-rw-r--r--libguile/stacks.c1
-rw-r--r--libguile/stime.c1
-rw-r--r--libguile/strings.c1
-rw-r--r--libguile/strorder.c1
-rw-r--r--libguile/strports.c1
-rw-r--r--libguile/struct.c1
-rw-r--r--libguile/symbols.c1
-rw-r--r--libguile/syntax.c1
-rw-r--r--libguile/threads.c1
-rw-r--r--libguile/throw.c1
-rw-r--r--libguile/trees.c1
-rw-r--r--libguile/unicode.c1
-rw-r--r--libguile/values.c1
-rw-r--r--libguile/variable.c1
-rw-r--r--libguile/vectors.c1
-rw-r--r--libguile/version.c1
-rw-r--r--libguile/vm.c1
-rw-r--r--libguile/vports.c1
-rw-r--r--libguile/weak-table.c1
-rw-r--r--libguile/weak-vector.c1
102 files changed, 182 insertions, 76 deletions
diff --git a/libguile/alist.c b/libguile/alist.c
index a4e279d2f..3f1d014d7 100644
--- a/libguile/alist.c
+++ b/libguile/alist.c
@@ -24,6 +24,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/boolean.h"
#include "libguile/eq.h"
#include "libguile/list.h"
diff --git a/libguile/array-map.c b/libguile/array-map.c
index 923dedd0d..addd048b3 100644
--- a/libguile/array-map.c
+++ b/libguile/array-map.c
@@ -29,6 +29,7 @@
#include <string.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
#include "libguile/strings.h"
diff --git a/libguile/arrays.c b/libguile/arrays.c
index 685231c0e..2ab5df075 100644
--- a/libguile/arrays.c
+++ b/libguile/arrays.c
@@ -31,6 +31,7 @@
#include "verify.h"
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
#include "libguile/__scm.h"
diff --git a/libguile/async.c b/libguile/async.c
index 4879048d8..abe4c3207 100644
--- a/libguile/async.c
+++ b/libguile/async.c
@@ -24,6 +24,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/atomics-internal.h"
#include "libguile/eval.h"
diff --git a/libguile/atomic.c b/libguile/atomic.c
index e5d3ee942..a82cd823f 100644
--- a/libguile/atomic.c
+++ b/libguile/atomic.c
@@ -23,6 +23,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/extensions.h"
#include "libguile/ports.h"
#include "libguile/atomics-internal.h"
diff --git a/libguile/backtrace.c b/libguile/backtrace.c
index 9b4a63075..18ac33ce6 100644
--- a/libguile/backtrace.c
+++ b/libguile/backtrace.c
@@ -26,6 +26,7 @@
#include <ctype.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/boolean.h"
#include <unistd.h>
diff --git a/libguile/bitvectors.c b/libguile/bitvectors.c
index a7be06e15..e3af3358f 100644
--- a/libguile/bitvectors.c
+++ b/libguile/bitvectors.c
@@ -26,6 +26,7 @@
#include <string.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
#include "libguile/__scm.h"
diff --git a/libguile/boolean.c b/libguile/boolean.c
index b23aa32dc..749703d56 100644
--- a/libguile/boolean.c
+++ b/libguile/boolean.c
@@ -24,6 +24,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/boolean.h"
#include "libguile/tags.h"
diff --git a/libguile/bytevectors.c b/libguile/bytevectors.c
index 75d9bca0c..766907736 100644
--- a/libguile/bytevectors.c
+++ b/libguile/bytevectors.c
@@ -37,6 +37,7 @@
#include <gmp.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/dynwind.h"
#include "libguile/extensions.h"
#include "libguile/bytevectors.h"
diff --git a/libguile/chars.c b/libguile/chars.c
index 237653606..cab87cd7e 100644
--- a/libguile/chars.c
+++ b/libguile/chars.c
@@ -30,6 +30,7 @@
#include <unictype.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/boolean.h"
#include "libguile/chars.h"
#include "libguile/numbers.h"
diff --git a/libguile/continuations.c b/libguile/continuations.c
index 508ba88e8..779810d9a 100644
--- a/libguile/continuations.c
+++ b/libguile/continuations.c
@@ -31,6 +31,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
#include "libguile/async.h"
diff --git a/libguile/control.c b/libguile/control.c
index 6a0a19c52..fb8f49aa3 100644
--- a/libguile/control.c
+++ b/libguile/control.c
@@ -23,6 +23,7 @@
#include <alloca.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/control.h"
#include "libguile/extensions.h"
diff --git a/libguile/debug-malloc.c b/libguile/debug-malloc.c
index f6dabe7b0..1ab1aea83 100644
--- a/libguile/debug-malloc.c
+++ b/libguile/debug-malloc.c
@@ -24,6 +24,7 @@
#include <stdio.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/alist.h"
#include "libguile/numbers.h"
#include "libguile/strings.h"
diff --git a/libguile/debug.c b/libguile/debug.c
index b0b110a40..57fd808be 100644
--- a/libguile/debug.c
+++ b/libguile/debug.c
@@ -36,6 +36,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/async.h"
#include "libguile/eval.h"
#include "libguile/list.h"
diff --git a/libguile/deprecation.c b/libguile/deprecation.c
index 187fef9d4..6fba31f93 100644
--- a/libguile/deprecation.c
+++ b/libguile/deprecation.c
@@ -28,6 +28,7 @@
#include <stdarg.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/deprecation.h"
diff --git a/libguile/dynl.c b/libguile/dynl.c
index 59fbd7c7e..413f2e3a6 100644
--- a/libguile/dynl.c
+++ b/libguile/dynl.c
@@ -51,6 +51,7 @@ maybe_drag_in_eprintf ()
#include <string.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/libpath.h"
#include "libguile/dynl.h"
#include "libguile/smob.h"
diff --git a/libguile/eq.c b/libguile/eq.c
index e7cbb2fb9..51f656446 100644
--- a/libguile/eq.c
+++ b/libguile/eq.c
@@ -28,6 +28,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/boolean.h"
#include "libguile/array-map.h"
#include "libguile/async.h"
diff --git a/libguile/error.c b/libguile/error.c
index 13019072f..907abb620 100644
--- a/libguile/error.c
+++ b/libguile/error.c
@@ -29,6 +29,7 @@
#include <errno.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/async.h"
#include "libguile/dynwind.h"
#include "libguile/list.h"
diff --git a/libguile/error.h b/libguile/error.h
index 81b7a58c5..883c2db6a 100644
--- a/libguile/error.h
+++ b/libguile/error.h
@@ -36,9 +36,12 @@ SCM_API SCM scm_misc_error_key;
+/* Snarfing for docs may override SCM_ASSERT; see snarf.h. */
+#ifndef SCM_ASSERT
#define SCM_ASSERT(_cond, _arg, _pos, _subr) \
do { if (SCM_UNLIKELY (!(_cond))) \
scm_wrong_type_arg (_subr, _pos, _arg); } while (0)
+#endif
#define SCM_ASSERT_TYPE(_cond, _arg, _pos, _subr, _msg) \
do { if (SCM_UNLIKELY (!(_cond))) \
scm_wrong_type_arg_msg(_subr, _pos, _arg, _msg); } while (0)
diff --git a/libguile/eval.c b/libguile/eval.c
index 70b682a09..d02d93883 100644
--- a/libguile/eval.c
+++ b/libguile/eval.c
@@ -27,6 +27,7 @@
#include <stdarg.h>
#include "libguile/__scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
#include "libguile/_scm.h"
diff --git a/libguile/evalext.c b/libguile/evalext.c
index 84b3dde79..6f492c756 100644
--- a/libguile/evalext.c
+++ b/libguile/evalext.c
@@ -24,6 +24,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/eval.h"
#include "libguile/list.h"
#include "libguile/fluids.h"
diff --git a/libguile/expand.c b/libguile/expand.c
index c28ca4e74..cc99484cc 100644
--- a/libguile/expand.c
+++ b/libguile/expand.c
@@ -24,6 +24,7 @@
#endif
#include "libguile/__scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
#include "libguile/_scm.h"
diff --git a/libguile/extensions.c b/libguile/extensions.c
index 5bca00871..be73c8ce4 100644
--- a/libguile/extensions.c
+++ b/libguile/extensions.c
@@ -1,6 +1,7 @@
/* extensions.c - registering and loading extensions.
*
- * Copyright (C) 2001, 2006, 2009, 2010, 2011 Free Software Foundation, Inc.
+ * Copyright (C) 2001,2006,2009-2011,2018
+ * Free Software Foundation, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
@@ -25,6 +26,7 @@
#include <string.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/dynl.h"
#include "libguile/dynwind.h"
#include "libguile/extensions.h"
diff --git a/libguile/fdes-finalizers.c b/libguile/fdes-finalizers.c
index 319560058..3143299f6 100644
--- a/libguile/fdes-finalizers.c
+++ b/libguile/fdes-finalizers.c
@@ -22,6 +22,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
#include "libguile/extensions.h"
diff --git a/libguile/feature.c b/libguile/feature.c
index 5364c1d2f..ca491f0e4 100644
--- a/libguile/feature.c
+++ b/libguile/feature.c
@@ -28,6 +28,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/strings.h"
#include "libguile/fluids.h"
diff --git a/libguile/filesys.c b/libguile/filesys.c
index 0be0b8f9a..30bd04482 100644
--- a/libguile/filesys.c
+++ b/libguile/filesys.c
@@ -80,6 +80,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
#include "libguile/async.h"
diff --git a/libguile/finalizers.c b/libguile/finalizers.c
index ead7e8f43..eb16f9d1b 100644
--- a/libguile/finalizers.c
+++ b/libguile/finalizers.c
@@ -35,6 +35,7 @@
#include "libguile/bdw-gc.h"
#include "libguile/finalizers.h"
#include "libguile/gc.h"
+#include "libguile/gsubr.h"
#include "libguile/init.h"
#include "libguile/threads.h"
diff --git a/libguile/fluids.c b/libguile/fluids.c
index 0a9df1a6d..773c3188a 100644
--- a/libguile/fluids.c
+++ b/libguile/fluids.c
@@ -25,6 +25,7 @@
#include <string.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/alist.h"
#include "libguile/atomics-internal.h"
diff --git a/libguile/foreign-object.c b/libguile/foreign-object.c
index 9442cf629..7a6a5eb5a 100644
--- a/libguile/foreign-object.c
+++ b/libguile/foreign-object.c
@@ -28,6 +28,7 @@
#include "libguile/finalizers.h"
#include "libguile/foreign-object.h"
#include "libguile/goops.h"
+#include "libguile/gsubr.h"
#include "libguile/list.h"
#include "libguile/numbers.h"
#include "libguile/procs.h"
diff --git a/libguile/foreign.c b/libguile/foreign.c
index ba7bc2161..41be3e551 100644
--- a/libguile/foreign.c
+++ b/libguile/foreign.c
@@ -29,6 +29,7 @@
#include <errno.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/boolean.h"
#include "libguile/bytevectors.h"
#include "libguile/dynwind.h"
diff --git a/libguile/fports.c b/libguile/fports.c
index 6121a0b80..24c2ed032 100644
--- a/libguile/fports.c
+++ b/libguile/fports.c
@@ -47,6 +47,7 @@
#include <full-write.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
#include "libguile/async.h"
diff --git a/libguile/frames.c b/libguile/frames.c
index 11eb54efb..c19f511c7 100644
--- a/libguile/frames.c
+++ b/libguile/frames.c
@@ -23,6 +23,7 @@
#include <stdlib.h>
#include <string.h>
#include "_scm.h"
+#include "libguile/gsubr.h"
#include "boolean.h"
#include "eval.h"
#include "extensions.h"
diff --git a/libguile/gc.c b/libguile/gc.c
index f52302a8b..9c7470d4a 100644
--- a/libguile/gc.c
+++ b/libguile/gc.c
@@ -33,6 +33,7 @@
#include <math.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/eval.h"
#include "libguile/stime.h"
#include "libguile/stackchk.h"
diff --git a/libguile/generalized-arrays.c b/libguile/generalized-arrays.c
index d45d20605..b521a48b4 100644
--- a/libguile/generalized-arrays.c
+++ b/libguile/generalized-arrays.c
@@ -28,6 +28,7 @@
#include <string.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/__scm.h"
#include "libguile/array-handle.h"
diff --git a/libguile/generalized-vectors.c b/libguile/generalized-vectors.c
index 68c1042ec..32077bba1 100644
--- a/libguile/generalized-vectors.c
+++ b/libguile/generalized-vectors.c
@@ -1,5 +1,5 @@
-/* Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004,
- * 2005, 2006, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
+/* Copyright (C) 1995-1998,2000-2006,2009-2014,2018
+ * Free Software Foundation, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
@@ -25,6 +25,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/__scm.h"
#include "libguile/generalized-vectors.h"
diff --git a/libguile/gettext.c b/libguile/gettext.c
index 3de3f5e89..a505c2e3c 100644
--- a/libguile/gettext.c
+++ b/libguile/gettext.c
@@ -22,6 +22,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/feature.h"
#include "libguile/strings.h"
#include "libguile/numbers.h"
diff --git a/libguile/gsubr.h b/libguile/gsubr.h
index 83eebc371..51999149c 100644
--- a/libguile/gsubr.h
+++ b/libguile/gsubr.h
@@ -3,8 +3,8 @@
#ifndef SCM_GSUBR_H
#define SCM_GSUBR_H
-/* Copyright (C) 1995, 1996, 1998, 2000, 2001, 2006, 2008, 2009,
- * 2010, 2011, 2013, 2015 Free Software Foundation, Inc.
+/* Copyright (C) 1995-1996,1998,2000-2001,2006,2008,2009-2011,2013,2015,2018
+ * Free Software Foundation, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
@@ -25,6 +25,7 @@
#include "libguile/__scm.h"
+#include "libguile/snarf.h"
@@ -72,6 +73,77 @@ SCM_API SCM scm_c_define_gsubr_with_generic (const char *name,
int req, int opt, int rst,
scm_t_subr fcn, SCM *gf);
+
+
+/* Casting to a function that can take any number of arguments. */
+#define SCM_FUNC_CAST_ARBITRARY_ARGS scm_t_subr
+
+#define SCM_DEFINE_GSUBR(FNAME, PRIMNAME, REQ, OPT, VAR, ARGLIST, DOCSTRING) \
+SCM_SNARF_HERE(\
+SCM_UNUSED static const char s_ ## FNAME [] = PRIMNAME; \
+SCM FNAME ARGLIST\
+)\
+SCM_SNARF_INIT(\
+scm_c_define_gsubr (s_ ## FNAME, REQ, OPT, VAR, \
+ (SCM_FUNC_CAST_ARBITRARY_ARGS) FNAME); \
+)\
+SCM_SNARF_DOCS(primitive, FNAME, PRIMNAME, ARGLIST, REQ, OPT, VAR, DOCSTRING)
+
+/* Always use the generic subr case. */
+#define SCM_DEFINE SCM_DEFINE_GSUBR
+
+
+#define SCM_PRIMITIVE_GENERIC(FNAME, PRIMNAME, REQ, OPT, VAR, ARGLIST, DOCSTRING) \
+SCM_SNARF_HERE(\
+SCM_UNUSED static const char s_ ## FNAME [] = PRIMNAME; \
+static SCM g_ ## FNAME; \
+SCM FNAME ARGLIST\
+)\
+SCM_SNARF_INIT(\
+g_ ## FNAME = SCM_PACK (0); \
+scm_c_define_gsubr_with_generic (s_ ## FNAME, REQ, OPT, VAR, \
+ (SCM_FUNC_CAST_ARBITRARY_ARGS) FNAME, \
+ &g_ ## FNAME); \
+)\
+SCM_SNARF_DOCS(primitive, FNAME, PRIMNAME, ARGLIST, REQ, OPT, VAR, DOCSTRING)
+
+#define SCM_DEFINE_PUBLIC(FNAME, PRIMNAME, REQ, OPT, VAR, ARGLIST, DOCSTRING) \
+SCM_SNARF_HERE(\
+SCM_UNUSED static const char s_ ## FNAME [] = PRIMNAME; \
+SCM FNAME ARGLIST\
+)\
+SCM_SNARF_INIT(\
+scm_c_define_gsubr (s_ ## FNAME, REQ, OPT, VAR, \
+ (SCM_FUNC_CAST_ARBITRARY_ARGS) FNAME); \
+scm_c_export (s_ ## FNAME, NULL); \
+)\
+SCM_SNARF_DOCS(primitive, FNAME, PRIMNAME, ARGLIST, REQ, OPT, VAR, DOCSTRING)
+
+#define SCM_PROC(RANAME, STR, REQ, OPT, VAR, CFN) \
+SCM_SNARF_HERE(SCM_UNUSED static const char RANAME[]=STR) \
+SCM_SNARF_INIT(scm_c_define_gsubr (RANAME, REQ, OPT, VAR, \
+ (SCM_FUNC_CAST_ARBITRARY_ARGS) CFN))
+
+#define SCM_REGISTER_PROC(RANAME, STR, REQ, OPT, VAR, CFN) \
+SCM_SNARF_HERE(SCM_UNUSED static const char RANAME[]=STR) \
+SCM_SNARF_INIT(scm_c_define_gsubr (RANAME, REQ, OPT, VAR, \
+ (SCM_FUNC_CAST_ARBITRARY_ARGS) CFN);) \
+SCM_SNARF_DOCS(register, CFN, STR, (), REQ, OPT, VAR, \
+ "implemented by the C function \"" #CFN "\"")
+
+#define SCM_GPROC(RANAME, STR, REQ, OPT, VAR, CFN, GF) \
+SCM_SNARF_HERE(\
+SCM_UNUSED static const char RANAME[]=STR;\
+static SCM GF \
+)SCM_SNARF_INIT(\
+GF = SCM_PACK (0); /* Dirk:FIXME:: Can we safely use #f instead of 0? */ \
+scm_c_define_gsubr_with_generic (RANAME, REQ, OPT, VAR, \
+ (SCM_FUNC_CAST_ARBITRARY_ARGS) CFN, &GF) \
+)
+
+
+
+
SCM_INTERNAL void scm_init_gsubr (void);
#endif /* SCM_GSUBR_H */
diff --git a/libguile/guardians.c b/libguile/guardians.c
index 52025b3a4..7edb39633 100644
--- a/libguile/guardians.c
+++ b/libguile/guardians.c
@@ -50,6 +50,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
diff --git a/libguile/hash.c b/libguile/hash.c
index 21dee0df1..18a878d3b 100644
--- a/libguile/hash.c
+++ b/libguile/hash.c
@@ -32,6 +32,7 @@
#include <unistr.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/chars.h"
#include "libguile/pairs.h"
#include "libguile/ports.h"
diff --git a/libguile/hashtab.c b/libguile/hashtab.c
index 03f71ff0f..f25543f11 100644
--- a/libguile/hashtab.c
+++ b/libguile/hashtab.c
@@ -28,6 +28,7 @@
#include <assert.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/alist.h"
#include "libguile/boolean.h"
diff --git a/libguile/hooks.c b/libguile/hooks.c
index dd3766adc..338988cd2 100644
--- a/libguile/hooks.c
+++ b/libguile/hooks.c
@@ -25,6 +25,7 @@
#include <stdio.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
diff --git a/libguile/i18n.c b/libguile/i18n.c
index d7c444725..9704e07d9 100644
--- a/libguile/i18n.c
+++ b/libguile/i18n.c
@@ -23,6 +23,7 @@
#include <alloca.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
#include "libguile/extensions.h"
diff --git a/libguile/instructions.c b/libguile/instructions.c
index 19d9dec7c..9d4826c9c 100644
--- a/libguile/instructions.c
+++ b/libguile/instructions.c
@@ -23,6 +23,7 @@
#include <string.h>
#include "_scm.h"
+#include "libguile/gsubr.h"
#include "threads.h"
#include "libguile/list.h"
#include "libguile/numbers.h"
diff --git a/libguile/intrinsics.c b/libguile/intrinsics.c
index 9d2f17fb2..840747fee 100644
--- a/libguile/intrinsics.c
+++ b/libguile/intrinsics.c
@@ -21,6 +21,7 @@
#endif
#include "_scm.h"
+#include "libguile/gsubr.h"
#include "boolean.h"
#include "alist.h"
#include "cache-internal.h"
diff --git a/libguile/ioext.c b/libguile/ioext.c
index 100d70830..a089e4614 100644
--- a/libguile/ioext.c
+++ b/libguile/ioext.c
@@ -28,6 +28,7 @@
#include <errno.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/async.h"
#include "libguile/dynwind.h"
diff --git a/libguile/keywords.c b/libguile/keywords.c
index f987a52d9..83e3b871b 100644
--- a/libguile/keywords.c
+++ b/libguile/keywords.c
@@ -27,6 +27,7 @@
#include <stdarg.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/async.h"
#include "libguile/list.h"
#include "libguile/pairs.h"
diff --git a/libguile/list.c b/libguile/list.c
index 7c1627ab9..08b8b51f4 100644
--- a/libguile/list.c
+++ b/libguile/list.c
@@ -24,6 +24,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
#include "libguile/numbers.h"
diff --git a/libguile/load.c b/libguile/load.c
index 97a715983..eaaa4ed15 100644
--- a/libguile/load.c
+++ b/libguile/load.c
@@ -28,6 +28,7 @@
#include <stdio.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/boolean.h"
#include "libguile/alist.h"
#include "libguile/chars.h"
diff --git a/libguile/loader.c b/libguile/loader.c
index b7c8c9418..e7c4f98a0 100644
--- a/libguile/loader.c
+++ b/libguile/loader.c
@@ -40,6 +40,7 @@
#include <full-read.h>
#include "_scm.h"
+#include "libguile/gsubr.h"
#include "bytevectors.h"
#include "boolean.h"
#include "elf.h"
diff --git a/libguile/macros.c b/libguile/macros.c
index d7d20071b..1ea8aafcb 100644
--- a/libguile/macros.c
+++ b/libguile/macros.c
@@ -23,6 +23,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/boolean.h"
#include "libguile/ports.h"
#include "libguile/print.h"
diff --git a/libguile/memoize.c b/libguile/memoize.c
index 1a149c5e4..1c4f05e11 100644
--- a/libguile/memoize.c
+++ b/libguile/memoize.c
@@ -28,6 +28,7 @@
#include <stdio.h>
#include "libguile/__scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
#include "libguile/_scm.h"
diff --git a/libguile/modules.c b/libguile/modules.c
index 9ff1ec76f..56e34c0ef 100644
--- a/libguile/modules.c
+++ b/libguile/modules.c
@@ -25,6 +25,7 @@
#include <stdarg.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
diff --git a/libguile/net_db.c b/libguile/net_db.c
index b500eb802..75d530dbf 100644
--- a/libguile/net_db.c
+++ b/libguile/net_db.c
@@ -46,6 +46,7 @@
#include <arpa/inet.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
#include "libguile/feature.h"
diff --git a/libguile/numbers.c b/libguile/numbers.c
index 16b5a6698..d722c4149 100644
--- a/libguile/numbers.c
+++ b/libguile/numbers.c
@@ -60,6 +60,7 @@
#include <stdarg.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/boolean.h"
#include "libguile/feature.h"
#include "libguile/pairs.h"
diff --git a/libguile/objprop.c b/libguile/objprop.c
index 8f8b7fb85..a0fc3b70d 100644
--- a/libguile/objprop.c
+++ b/libguile/objprop.c
@@ -23,6 +23,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/alist.h"
#include "libguile/async.h"
#include "libguile/hashtab.h"
diff --git a/libguile/pairs.c b/libguile/pairs.c
index 44b627f97..6b5113540 100644
--- a/libguile/pairs.c
+++ b/libguile/pairs.c
@@ -24,7 +24,7 @@
#endif
#include "libguile/_scm.h"
-
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "verify.h"
diff --git a/libguile/poll.c b/libguile/poll.c
index d35a9b58a..ab480201f 100644
--- a/libguile/poll.c
+++ b/libguile/poll.c
@@ -33,6 +33,7 @@
#include "libguile/bytevectors.h"
#include "libguile/error.h"
#include "libguile/extensions.h"
+#include "libguile/gsubr.h"
#include "libguile/numbers.h"
#include "libguile/ports-internal.h"
#include "libguile/syscalls.h"
diff --git a/libguile/ports.c b/libguile/ports.c
index 5a51360fc..fd68329af 100644
--- a/libguile/ports.c
+++ b/libguile/ports.c
@@ -39,6 +39,7 @@
#include <striconveh.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
#include "libguile/async.h"
diff --git a/libguile/posix.c b/libguile/posix.c
index edf03b01c..718a9d93c 100644
--- a/libguile/posix.c
+++ b/libguile/posix.c
@@ -63,6 +63,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/async.h"
#include "libguile/dynwind.h"
diff --git a/libguile/print.c b/libguile/print.c
index b801884de..dbca06bd0 100644
--- a/libguile/print.c
+++ b/libguile/print.c
@@ -31,6 +31,7 @@
#include <unictype.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
#include "libguile/chars.h"
diff --git a/libguile/procs.c b/libguile/procs.c
index 7092748f0..c168fe4a6 100644
--- a/libguile/procs.c
+++ b/libguile/procs.c
@@ -24,6 +24,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/goops.h"
#include "libguile/strings.h"
diff --git a/libguile/programs.c b/libguile/programs.c
index 697338419..e502ece6b 100644
--- a/libguile/programs.c
+++ b/libguile/programs.c
@@ -22,6 +22,7 @@
#include <string.h>
#include "_scm.h"
+#include "libguile/gsubr.h"
#include "boolean.h"
#include "instructions.h"
#include "alist.h"
diff --git a/libguile/promises.c b/libguile/promises.c
index 20274b2eb..378028d2c 100644
--- a/libguile/promises.c
+++ b/libguile/promises.c
@@ -26,6 +26,7 @@
#include <alloca.h>
#include "libguile/__scm.h"
+#include "libguile/gsubr.h"
#include "libguile/_scm.h"
#include "libguile/alist.h"
diff --git a/libguile/r6rs-ports.c b/libguile/r6rs-ports.c
index 3db8bd54b..cfad4e04f 100644
--- a/libguile/r6rs-ports.c
+++ b/libguile/r6rs-ports.c
@@ -27,6 +27,7 @@
#include <assert.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/boolean.h"
#include "libguile/bytevectors.h"
#include "libguile/chars.h"
diff --git a/libguile/random.c b/libguile/random.c
index 66626f76c..60279e84e 100644
--- a/libguile/random.c
+++ b/libguile/random.c
@@ -25,8 +25,6 @@
# include <config.h>
#endif
-#include "libguile/_scm.h"
-
#include <gmp.h>
#include <stdio.h>
#include <math.h>
@@ -34,6 +32,8 @@
#include <sys/types.h>
#include <unistd.h>
+#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/smob.h"
#include "libguile/generalized-arrays.h"
#include "libguile/list.h"
diff --git a/libguile/rdelim.c b/libguile/rdelim.c
index 40d0073da..53990f48a 100644
--- a/libguile/rdelim.c
+++ b/libguile/rdelim.c
@@ -21,6 +21,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include <stdio.h>
diff --git a/libguile/read.c b/libguile/read.c
index 7b9854183..d1eba6246 100644
--- a/libguile/read.c
+++ b/libguile/read.c
@@ -34,6 +34,7 @@
#include <alloca.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
#include "libguile/bytevectors.h"
diff --git a/libguile/regex-posix.c b/libguile/regex-posix.c
index 8f47912de..3b797b1fb 100644
--- a/libguile/regex-posix.c
+++ b/libguile/regex-posix.c
@@ -36,6 +36,7 @@
#include <sys/types.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include <regex.h>
diff --git a/libguile/rw.c b/libguile/rw.c
index b13da1c89..fb8a36f59 100644
--- a/libguile/rw.c
+++ b/libguile/rw.c
@@ -28,6 +28,7 @@
#include <string.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/async.h"
#include "libguile/fports.h"
#include "libguile/numbers.h"
diff --git a/libguile/scmsigs.c b/libguile/scmsigs.c
index a2797344d..b502c8739 100644
--- a/libguile/scmsigs.c
+++ b/libguile/scmsigs.c
@@ -42,6 +42,7 @@
#include <full-write.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
diff --git a/libguile/simpos.c b/libguile/simpos.c
index 3701f791e..6163cc5d8 100644
--- a/libguile/simpos.c
+++ b/libguile/simpos.c
@@ -28,6 +28,7 @@
#include <unistd.h> /* for _exit */
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/numbers.h"
#include "libguile/strings.h"
diff --git a/libguile/smob.c b/libguile/smob.c
index e2ebef8f0..f710cd67c 100644
--- a/libguile/smob.c
+++ b/libguile/smob.c
@@ -31,6 +31,7 @@
#include "libguile/async.h"
#include "libguile/goops.h"
+#include "libguile/gsubr.h"
#include "libguile/finalizers.h"
#include "libguile/instructions.h"
#include "libguile/numbers.h"
diff --git a/libguile/snarf.h b/libguile/snarf.h
index a81f7129f..836067b64 100644
--- a/libguile/snarf.h
+++ b/libguile/snarf.h
@@ -26,13 +26,9 @@
#include <libguile/gc.h>
-#include <libguile/gsubr.h>
-/* Macros for snarfing initialization actions from C source. */
-
-/* Casting to a function that can take any number of arguments. */
-#define SCM_FUNC_CAST_ARBITRARY_ARGS scm_t_subr
+/* Macros for snarfing initialization actions from C source. */
#ifdef SCM_ALIGNED
/* We support static allocation of some `SCM' objects. */
@@ -89,69 +85,6 @@ DOCSTRING ^^ }
# endif
#endif
-#define SCM_DEFINE_GSUBR(FNAME, PRIMNAME, REQ, OPT, VAR, ARGLIST, DOCSTRING) \
-SCM_SNARF_HERE(\
-SCM_UNUSED static const char s_ ## FNAME [] = PRIMNAME; \
-SCM FNAME ARGLIST\
-)\
-SCM_SNARF_INIT(\
-scm_c_define_gsubr (s_ ## FNAME, REQ, OPT, VAR, \
- (SCM_FUNC_CAST_ARBITRARY_ARGS) FNAME); \
-)\
-SCM_SNARF_DOCS(primitive, FNAME, PRIMNAME, ARGLIST, REQ, OPT, VAR, DOCSTRING)
-
-/* Always use the generic subr case. */
-#define SCM_DEFINE SCM_DEFINE_GSUBR
-
-
-#define SCM_PRIMITIVE_GENERIC(FNAME, PRIMNAME, REQ, OPT, VAR, ARGLIST, DOCSTRING) \
-SCM_SNARF_HERE(\
-SCM_UNUSED static const char s_ ## FNAME [] = PRIMNAME; \
-static SCM g_ ## FNAME; \
-SCM FNAME ARGLIST\
-)\
-SCM_SNARF_INIT(\
-g_ ## FNAME = SCM_PACK (0); \
-scm_c_define_gsubr_with_generic (s_ ## FNAME, REQ, OPT, VAR, \
- (SCM_FUNC_CAST_ARBITRARY_ARGS) FNAME, \
- &g_ ## FNAME); \
-)\
-SCM_SNARF_DOCS(primitive, FNAME, PRIMNAME, ARGLIST, REQ, OPT, VAR, DOCSTRING)
-
-#define SCM_DEFINE_PUBLIC(FNAME, PRIMNAME, REQ, OPT, VAR, ARGLIST, DOCSTRING) \
-SCM_SNARF_HERE(\
-SCM_UNUSED static const char s_ ## FNAME [] = PRIMNAME; \
-SCM FNAME ARGLIST\
-)\
-SCM_SNARF_INIT(\
-scm_c_define_gsubr (s_ ## FNAME, REQ, OPT, VAR, \
- (SCM_FUNC_CAST_ARBITRARY_ARGS) FNAME); \
-scm_c_export (s_ ## FNAME, NULL); \
-)\
-SCM_SNARF_DOCS(primitive, FNAME, PRIMNAME, ARGLIST, REQ, OPT, VAR, DOCSTRING)
-
-#define SCM_PROC(RANAME, STR, REQ, OPT, VAR, CFN) \
-SCM_SNARF_HERE(SCM_UNUSED static const char RANAME[]=STR) \
-SCM_SNARF_INIT(scm_c_define_gsubr (RANAME, REQ, OPT, VAR, \
- (SCM_FUNC_CAST_ARBITRARY_ARGS) CFN))
-
-#define SCM_REGISTER_PROC(RANAME, STR, REQ, OPT, VAR, CFN) \
-SCM_SNARF_HERE(SCM_UNUSED static const char RANAME[]=STR) \
-SCM_SNARF_INIT(scm_c_define_gsubr (RANAME, REQ, OPT, VAR, \
- (SCM_FUNC_CAST_ARBITRARY_ARGS) CFN);) \
-SCM_SNARF_DOCS(register, CFN, STR, (), REQ, OPT, VAR, \
- "implemented by the C function \"" #CFN "\"")
-
-#define SCM_GPROC(RANAME, STR, REQ, OPT, VAR, CFN, GF) \
-SCM_SNARF_HERE(\
-SCM_UNUSED static const char RANAME[]=STR;\
-static SCM GF \
-)SCM_SNARF_INIT(\
-GF = SCM_PACK (0); /* Dirk:FIXME:: Can we safely use #f instead of 0? */ \
-scm_c_define_gsubr_with_generic (RANAME, REQ, OPT, VAR, \
- (SCM_FUNC_CAST_ARBITRARY_ARGS) CFN, &GF) \
-)
-
#define SCM_KEYWORD(c_name, scheme_name) \
SCM_SNARF_HERE(static SCM c_name) \
SCM_SNARF_INIT(c_name = scm_from_locale_keyword (scheme_name))
diff --git a/libguile/socket.c b/libguile/socket.c
index 1ab81586e..e23c6afed 100644
--- a/libguile/socket.c
+++ b/libguile/socket.c
@@ -47,6 +47,7 @@
#include <gmp.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/async.h"
#include "libguile/arrays.h"
diff --git a/libguile/sort.c b/libguile/sort.c
index 17edc7b14..6bbd334a9 100644
--- a/libguile/sort.c
+++ b/libguile/sort.c
@@ -40,6 +40,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
#include "libguile/eval.h"
diff --git a/libguile/srcprop.c b/libguile/srcprop.c
index d33731bc5..ca90e4fb8 100644
--- a/libguile/srcprop.c
+++ b/libguile/srcprop.c
@@ -25,6 +25,7 @@
#include <errno.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/async.h"
#include "libguile/smob.h"
diff --git a/libguile/srfi-1.c b/libguile/srfi-1.c
index d53c7a443..2f1dc4b34 100644
--- a/libguile/srfi-1.c
+++ b/libguile/srfi-1.c
@@ -25,6 +25,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
#include "libguile/eq.h"
diff --git a/libguile/srfi-13.c b/libguile/srfi-13.c
index d961c50ca..0d400e01e 100644
--- a/libguile/srfi-13.c
+++ b/libguile/srfi-13.c
@@ -29,6 +29,7 @@
#include <unictype.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include <libguile/deprecation.h>
#include "libguile/eval.h"
diff --git a/libguile/srfi-14.c b/libguile/srfi-14.c
index 059923b49..243da3e57 100644
--- a/libguile/srfi-14.c
+++ b/libguile/srfi-14.c
@@ -29,6 +29,7 @@
#include <unictype.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
#include "libguile/chars.h"
diff --git a/libguile/srfi-4.c b/libguile/srfi-4.c
index 9d78a555c..b0700e0ae 100644
--- a/libguile/srfi-4.c
+++ b/libguile/srfi-4.c
@@ -25,6 +25,7 @@
#include <string.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/boolean.h"
#include "libguile/__scm.h"
#include "libguile/bdw-gc.h"
diff --git a/libguile/srfi-60.c b/libguile/srfi-60.c
index c155b8e57..74c819f30 100644
--- a/libguile/srfi-60.c
+++ b/libguile/srfi-60.c
@@ -25,6 +25,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/eq.h"
diff --git a/libguile/stackchk.c b/libguile/stackchk.c
index 28760c497..12df6e989 100644
--- a/libguile/stackchk.c
+++ b/libguile/stackchk.c
@@ -24,6 +24,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/numbers.h"
#include "libguile/ports.h"
#include "libguile/threads.h"
diff --git a/libguile/stacks.c b/libguile/stacks.c
index e3842332c..23a2c266c 100644
--- a/libguile/stacks.c
+++ b/libguile/stacks.c
@@ -24,6 +24,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/boolean.h"
#include "libguile/control.h"
#include "libguile/eval.h"
diff --git a/libguile/stime.c b/libguile/stime.c
index aaa159546..8cf92ba82 100644
--- a/libguile/stime.c
+++ b/libguile/stime.c
@@ -50,6 +50,7 @@
#include <unistr.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
#include "libguile/async.h"
diff --git a/libguile/strings.c b/libguile/strings.c
index f1a263033..3159ae39b 100644
--- a/libguile/strings.c
+++ b/libguile/strings.c
@@ -36,6 +36,7 @@
#include "striconveh.h"
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/chars.h"
#include "libguile/strings.h"
diff --git a/libguile/strorder.c b/libguile/strorder.c
index f88465740..bfb4d3f3e 100644
--- a/libguile/strorder.c
+++ b/libguile/strorder.c
@@ -23,6 +23,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/boolean.h"
#include "libguile/chars.h"
#include "libguile/pairs.h"
diff --git a/libguile/strports.c b/libguile/strports.c
index 06f7654d2..d610fd0ce 100644
--- a/libguile/strports.c
+++ b/libguile/strports.c
@@ -25,6 +25,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include <stdio.h>
#include <unistd.h>
diff --git a/libguile/struct.c b/libguile/struct.c
index a7f66992d..59de787f7 100644
--- a/libguile/struct.c
+++ b/libguile/struct.c
@@ -29,6 +29,7 @@
#define SCM_BUILDING_DEPRECATED_CODE
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/boolean.h"
#include "libguile/async.h"
#include "libguile/chars.h"
diff --git a/libguile/symbols.c b/libguile/symbols.c
index 603502fca..a4b17bfe0 100644
--- a/libguile/symbols.c
+++ b/libguile/symbols.c
@@ -26,6 +26,7 @@
#include <unistr.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/boolean.h"
#include "libguile/chars.h"
diff --git a/libguile/syntax.c b/libguile/syntax.c
index 223103609..fc84d2fb9 100644
--- a/libguile/syntax.c
+++ b/libguile/syntax.c
@@ -23,6 +23,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/keywords.h"
#include "libguile/eval.h"
#include "libguile/ports.h"
diff --git a/libguile/threads.c b/libguile/threads.c
index 8e3887a9d..c0b955bae 100644
--- a/libguile/threads.c
+++ b/libguile/threads.c
@@ -43,6 +43,7 @@
#include <gc/gc_mark.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/boolean.h"
#include "libguile/deprecation.h"
#include "libguile/extensions.h"
diff --git a/libguile/throw.c b/libguile/throw.c
index 18c0e0d08..ff6fb36a8 100644
--- a/libguile/throw.c
+++ b/libguile/throw.c
@@ -32,6 +32,7 @@
#include "libguile/smob.h"
#include "libguile/eval.h"
#include "libguile/eq.h"
+#include "libguile/gsubr.h"
#include "libguile/control.h"
#include "libguile/deprecation.h"
#include "libguile/backtrace.h"
diff --git a/libguile/trees.c b/libguile/trees.c
index 21bb223c2..b9da433ee 100644
--- a/libguile/trees.c
+++ b/libguile/trees.c
@@ -24,6 +24,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/eq.h"
diff --git a/libguile/unicode.c b/libguile/unicode.c
index 37eb57c56..2494f8831 100644
--- a/libguile/unicode.c
+++ b/libguile/unicode.c
@@ -28,6 +28,7 @@
#include <uniname.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/extensions.h"
#include "libguile/unicode.h"
diff --git a/libguile/values.c b/libguile/values.c
index 28cb93ddb..63531eedd 100644
--- a/libguile/values.c
+++ b/libguile/values.c
@@ -22,6 +22,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/eval.h"
#include "libguile/feature.h"
diff --git a/libguile/variable.c b/libguile/variable.c
index f5c8ef81b..8d3bdc778 100644
--- a/libguile/variable.c
+++ b/libguile/variable.c
@@ -24,6 +24,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/eq.h"
#include "libguile/list.h"
#include "libguile/ports.h"
diff --git a/libguile/vectors.c b/libguile/vectors.c
index 13024ed8f..d23706ac2 100644
--- a/libguile/vectors.c
+++ b/libguile/vectors.c
@@ -24,6 +24,7 @@
#endif
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/pairs.h"
#include "libguile/eq.h"
#include "libguile/list.h"
diff --git a/libguile/version.c b/libguile/version.c
index b72cd4037..144889125 100644
--- a/libguile/version.c
+++ b/libguile/version.c
@@ -24,6 +24,7 @@
#include <stdio.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/strings.h"
#include "libguile/numbers.h"
diff --git a/libguile/vm.c b/libguile/vm.c
index 404a98b3a..7dc412fd4 100644
--- a/libguile/vm.c
+++ b/libguile/vm.c
@@ -39,6 +39,7 @@
#include <gc/gc_mark.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/atomic.h"
#include "libguile/atomics-internal.h"
#include "libguile/cache-internal.h"
diff --git a/libguile/vports.c b/libguile/vports.c
index 7c07f9c3c..23ec0a5eb 100644
--- a/libguile/vports.c
+++ b/libguile/vports.c
@@ -28,6 +28,7 @@
#include <errno.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/boolean.h"
#include "libguile/eval.h"
#include "libguile/chars.h"
diff --git a/libguile/weak-table.c b/libguile/weak-table.c
index f56490106..cf3727a6e 100644
--- a/libguile/weak-table.c
+++ b/libguile/weak-table.c
@@ -29,6 +29,7 @@
#include <gc/gc_typed.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/alist.h"
#include "libguile/finalizers.h"
#include "libguile/hash.h"
diff --git a/libguile/weak-vector.c b/libguile/weak-vector.c
index f7305c05b..3032dae41 100644
--- a/libguile/weak-vector.c
+++ b/libguile/weak-vector.c
@@ -27,6 +27,7 @@
#include <string.h>
#include "libguile/_scm.h"
+#include "libguile/gsubr.h"
#include "libguile/extensions.h"
#include "libguile/list.h"
#include "libguile/pairs.h"