mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-06 23:50:18 +02:00
* libguile/root.h * libguile/root.c (scm_sys_protects): It used to be that for some reason we'd define a special array of "protected" values. This was a little silly, always, but with the BDW GC it's completely unnecessary. Also many of these variables were unused, and none of them were good API. So remove this array, and either eliminate, make static, or make internal the various values. * libguile/snarf.h: No need to generate calls to scm_permanent_object. * guile-readline/readline.c (scm_init_readline): No need to call scm_permanent_object. * libguile/array-map.c (ramap, rafe): Remove the dubious nullvect optimizations. * libguile/async.c (scm_init_async): No need to init scm_asyncs, it is no more. * libguile/eval.c (scm_init_eval): No need to init scm_listofnull, it is no more. * libguile/gc.c: Make scm_protects a static var. (scm_storage_prehistory): Change the sanity check to use the address of protects. (scm_init_gc_protect_object): No need to clear the scm_sys_protects, as it is no more. * libguile/keywords.c: Make the keyword obarray a static var. * libguile/numbers.c: Make flo0 a static var. * libguile/objprop.c: Make object_whash a static var. * libguile/properties.c: Make properties_whash a static var. * libguile/srcprop.h: * libguile/srcprop.c: Make scm_source_whash a global with internal linkage. * libguile/strings.h: * libguile/strings.c: Make scm_nullstr a global with internal linkage. * libguile/vectors.c (scm_init_vectors): No need to init scm_nullvect, it's unused.
402 lines
13 KiB
C
402 lines
13 KiB
C
/* classes: h_files */
|
||
|
||
#ifndef SCM_SNARF_H
|
||
#define SCM_SNARF_H
|
||
|
||
/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001, 2002, 2003, 2004, 2006, 2009 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
|
||
* as published by the Free Software Foundation; either version 3 of
|
||
* the License, or (at your option) any later version.
|
||
*
|
||
* This library 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
|
||
* Lesser General Public License for more details.
|
||
*
|
||
* You should have received a copy of the GNU Lesser General Public
|
||
* License along with this library; if not, write to the Free Software
|
||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||
* 02110-1301 USA
|
||
*/
|
||
|
||
|
||
|
||
/* Macros for snarfing initialization actions from C source. */
|
||
|
||
#if defined(__cplusplus) || defined(GUILE_CPLUSPLUS_SNARF)
|
||
|
||
/* This used to be "SCM (*)(...)" but GCC on RedHat 7.1 doesn't seem
|
||
to like it.
|
||
*/
|
||
#define SCM_FUNC_CAST_ARBITRARY_ARGS SCM (*)()
|
||
|
||
#else
|
||
#define SCM_FUNC_CAST_ARBITRARY_ARGS SCM (*)()
|
||
#endif
|
||
|
||
#if (defined SCM_ALIGNED) && (SCM_DEBUG_TYPING_STRICTNESS <= 1)
|
||
/* We support static allocation of some `SCM' objects. */
|
||
# define SCM_SUPPORT_STATIC_ALLOCATION
|
||
#endif
|
||
|
||
/* C preprocessor token concatenation. */
|
||
#define scm_i_paste(x, y) x ## y
|
||
#define scm_i_paste3(a, b, c) a ## b ## c
|
||
|
||
|
||
|
||
/* Generic macros to be used in user macro definitions.
|
||
*
|
||
* For example, in order to define a macro which creates ints and
|
||
* initializes them to the result of foo (), do:
|
||
*
|
||
* #define SCM_FOO(NAME) \
|
||
* SCM_SNARF_HERE (int NAME) \
|
||
* SCM_SNARF_INIT (NAME = foo ())
|
||
*
|
||
* The SCM_SNARF_INIT text goes into the corresponding .x file
|
||
* up through the first occurrence of SCM_SNARF_DOC_START on that
|
||
* line, if any.
|
||
*/
|
||
|
||
#ifdef SCM_MAGIC_SNARF_INITS
|
||
# define SCM_SNARF_HERE(X)
|
||
# define SCM_SNARF_INIT(X) ^^ X ^:^
|
||
# define SCM_SNARF_DOCS(TYPE, CNAME, FNAME, ARGLIST, REQ, OPT, VAR, DOCSTRING)
|
||
#else
|
||
# ifdef SCM_MAGIC_SNARF_DOCS
|
||
# define SCM_SNARF_HERE(X)
|
||
# define SCM_SNARF_INIT(X)
|
||
# define SCM_SNARF_DOCS(TYPE, CNAME, FNAME, ARGLIST, REQ, OPT, VAR, DOCSTRING) \
|
||
^^ { \
|
||
cname CNAME ^^ \
|
||
fname FNAME ^^ \
|
||
type TYPE ^^ \
|
||
location __FILE__ __LINE__ ^^ \
|
||
arglist ARGLIST ^^ \
|
||
argsig REQ OPT VAR ^^ \
|
||
DOCSTRING ^^ }
|
||
# else
|
||
# define SCM_SNARF_HERE(X) X
|
||
# define SCM_SNARF_INIT(X)
|
||
# define SCM_SNARF_DOCS(TYPE, CNAME, FNAME, ARGLIST, REQ, OPT, VAR, DOCSTRING)
|
||
# endif
|
||
#endif
|
||
|
||
#define SCM_DEFINE_GSUBR(FNAME, PRIMNAME, REQ, OPT, VAR, ARGLIST, DOCSTRING) \
|
||
SCM_SNARF_HERE(\
|
||
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)
|
||
|
||
#ifdef SCM_SUPPORT_STATIC_ALLOCATION
|
||
|
||
/* Static subr allocation. */
|
||
#define SCM_DEFINE(FNAME, PRIMNAME, REQ, OPT, VAR, ARGLIST, DOCSTRING) \
|
||
SCM_SYMBOL (scm_i_paste (FNAME, __name), PRIMNAME); \
|
||
SCM_SNARF_HERE( \
|
||
static const char scm_i_paste (s_, FNAME) [] = PRIMNAME; \
|
||
SCM_API SCM FNAME ARGLIST; \
|
||
SCM_IMMUTABLE_SUBR (scm_i_paste (FNAME, __subr), \
|
||
scm_i_paste (FNAME, __name), \
|
||
REQ, OPT, VAR, &FNAME); \
|
||
SCM FNAME ARGLIST \
|
||
) \
|
||
SCM_SNARF_INIT( \
|
||
/* Initialize the procedure name (an interned symbol). */ \
|
||
scm_i_paste (FNAME, __subr_meta_info)[0] = scm_i_paste (FNAME, __name); \
|
||
\
|
||
/* Define the subr. */ \
|
||
scm_c_define (scm_i_paste (s_, FNAME), scm_i_paste (FNAME, __subr)); \
|
||
) \
|
||
SCM_SNARF_DOCS(primitive, FNAME, PRIMNAME, ARGLIST, REQ, OPT, VAR, DOCSTRING)
|
||
|
||
#else /* !SCM_SUPPORT_STATIC_ALLOCATION */
|
||
|
||
/* Always use the generic subr case. */
|
||
#define SCM_DEFINE SCM_DEFINE_GSUBR
|
||
|
||
#endif /* !SCM_SUPPORT_STATIC_ALLOCATION */
|
||
|
||
|
||
#define SCM_PRIMITIVE_GENERIC(FNAME, PRIMNAME, REQ, OPT, VAR, ARGLIST, DOCSTRING) \
|
||
SCM_SNARF_HERE(\
|
||
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(\
|
||
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_DEFINE1(FNAME, PRIMNAME, TYPE, ARGLIST, DOCSTRING) \
|
||
SCM_SNARF_HERE(\
|
||
static const char s_ ## FNAME [] = PRIMNAME; \
|
||
SCM FNAME ARGLIST\
|
||
)\
|
||
SCM_SNARF_INIT(scm_c_define_subr (s_ ## FNAME, TYPE, FNAME); ) \
|
||
SCM_SNARF_DOCS(1, FNAME, PRIMNAME, ARGLIST, 2, 0, 0, DOCSTRING)
|
||
|
||
#define SCM_PRIMITIVE_GENERIC_1(FNAME, PRIMNAME, TYPE, ARGLIST, DOCSTRING) \
|
||
SCM_SNARF_HERE(\
|
||
static const char s_ ## FNAME [] = PRIMNAME; \
|
||
static SCM g_ ## FNAME; \
|
||
SCM FNAME ARGLIST\
|
||
)\
|
||
SCM_SNARF_INIT(\
|
||
g_ ## FNAME = SCM_PACK (0); \
|
||
scm_c_define_subr_with_generic (s_ ## FNAME, TYPE, FNAME, &g_ ## FNAME); \
|
||
)\
|
||
SCM_SNARF_DOCS(1, FNAME, PRIMNAME, ARGLIST, 2, 0, 0, DOCSTRING)
|
||
|
||
#define SCM_PROC(RANAME, STR, REQ, OPT, VAR, CFN) \
|
||
SCM_SNARF_HERE(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(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(\
|
||
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_PROC1(RANAME, STR, TYPE, CFN) \
|
||
SCM_SNARF_HERE(static const char RANAME[]=STR) \
|
||
SCM_SNARF_INIT(\
|
||
scm_c_define_subr (RANAME, TYPE, (SCM_FUNC_CAST_ARBITRARY_ARGS) CFN) \
|
||
)
|
||
|
||
|
||
#define SCM_GPROC1(RANAME, STR, TYPE, CFN, GF) \
|
||
SCM_SNARF_HERE(\
|
||
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_subr_with_generic (RANAME, TYPE, \
|
||
(SCM_FUNC_CAST_ARBITRARY_ARGS) CFN, &GF) \
|
||
)
|
||
|
||
#define SCM_SYNTAX(RANAME, STR, TYPE, CFN) \
|
||
SCM_SNARF_HERE(static const char RANAME[]=STR)\
|
||
SCM_SNARF_INIT(scm_make_synt (RANAME, TYPE, CFN))
|
||
|
||
#ifdef SCM_SUPPORT_STATIC_ALLOCATION
|
||
|
||
# define SCM_SYMBOL(c_name, scheme_name) \
|
||
SCM_SNARF_HERE( \
|
||
SCM_IMMUTABLE_STRING (scm_i_paste (c_name, _string), scheme_name); \
|
||
static SCM c_name) \
|
||
SCM_SNARF_INIT( \
|
||
c_name = scm_string_to_symbol (scm_i_paste (c_name, _string)) \
|
||
)
|
||
|
||
# define SCM_GLOBAL_SYMBOL(c_name, scheme_name) \
|
||
SCM_SNARF_HERE( \
|
||
SCM_IMMUTABLE_STRING (scm_i_paste (c_name, _string), scheme_name); \
|
||
SCM c_name) \
|
||
SCM_SNARF_INIT( \
|
||
c_name = scm_string_to_symbol (scm_i_paste (c_name, _string)) \
|
||
)
|
||
|
||
#else /* !SCM_SUPPORT_STATIC_ALLOCATION */
|
||
|
||
# define SCM_SYMBOL(c_name, scheme_name) \
|
||
SCM_SNARF_HERE(static SCM c_name) \
|
||
SCM_SNARF_INIT(c_name = scm_from_locale_symbol (scheme_name))
|
||
|
||
# define SCM_GLOBAL_SYMBOL(c_name, scheme_name) \
|
||
SCM_SNARF_HERE(SCM c_name) \
|
||
SCM_SNARF_INIT(c_name = scm_from_locale_symbol (scheme_name))
|
||
|
||
#endif /* !SCM_SUPPORT_STATIC_ALLOCATION */
|
||
|
||
#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))
|
||
|
||
#define SCM_GLOBAL_KEYWORD(c_name, scheme_name) \
|
||
SCM_SNARF_HERE(SCM c_name) \
|
||
SCM_SNARF_INIT(c_name = scm_from_locale_keyword (scheme_name))
|
||
|
||
#define SCM_VARIABLE(c_name, scheme_name) \
|
||
SCM_SNARF_HERE(static SCM c_name) \
|
||
SCM_SNARF_INIT(c_name = scm_c_define (scheme_name, SCM_BOOL_F);)
|
||
|
||
#define SCM_GLOBAL_VARIABLE(c_name, scheme_name) \
|
||
SCM_SNARF_HERE(SCM c_name) \
|
||
SCM_SNARF_INIT(c_name = scm_c_define (scheme_name, SCM_BOOL_F);)
|
||
|
||
#define SCM_VARIABLE_INIT(c_name, scheme_name, init_val) \
|
||
SCM_SNARF_HERE(static SCM c_name) \
|
||
SCM_SNARF_INIT(c_name = scm_c_define (scheme_name, init_val);)
|
||
|
||
#define SCM_GLOBAL_VARIABLE_INIT(c_name, scheme_name, init_val) \
|
||
SCM_SNARF_HERE(SCM c_name) \
|
||
SCM_SNARF_INIT(c_name = scm_c_define (scheme_name, init_val);)
|
||
|
||
#define SCM_MUTEX(c_name) \
|
||
SCM_SNARF_HERE(static scm_t_mutex c_name) \
|
||
SCM_SNARF_INIT(scm_i_plugin_mutex_init (&c_name, &scm_i_plugin_mutex))
|
||
|
||
#define SCM_GLOBAL_MUTEX(c_name) \
|
||
SCM_SNARF_HERE(scm_t_mutex c_name) \
|
||
SCM_SNARF_INIT(scm_i_plugin_mutex_init (&c_name, &scm_i_plugin_mutex))
|
||
|
||
#define SCM_REC_MUTEX(c_name) \
|
||
SCM_SNARF_HERE(static scm_t_rec_mutex c_name) \
|
||
SCM_SNARF_INIT(scm_i_plugin_rec_mutex_init (&c_name, &scm_i_plugin_rec_mutex))
|
||
|
||
#define SCM_GLOBAL_REC_MUTEX(c_name) \
|
||
SCM_SNARF_HERE(scm_t_rec_mutex c_name) \
|
||
SCM_SNARF_INIT(scm_i_plugin_rec_mutex_init (&c_name, &scm_i_plugin_rec_mutex))
|
||
|
||
#define SCM_SMOB(tag, scheme_name, size) \
|
||
SCM_SNARF_HERE(static scm_t_bits tag) \
|
||
SCM_SNARF_INIT((tag)=scm_make_smob_type((scheme_name), (size));)
|
||
|
||
#define SCM_GLOBAL_SMOB(tag, scheme_name, size) \
|
||
SCM_SNARF_HERE(scm_t_bits tag) \
|
||
SCM_SNARF_INIT((tag)=scm_make_smob_type((scheme_name), (size));)
|
||
|
||
#define SCM_SMOB_MARK(tag, c_name, arg) \
|
||
SCM_SNARF_HERE(static SCM c_name(SCM arg)) \
|
||
SCM_SNARF_INIT(scm_set_smob_mark((tag), (c_name));)
|
||
|
||
#define SCM_GLOBAL_SMOB_MARK(tag, c_name, arg) \
|
||
SCM_SNARF_HERE(SCM c_name(SCM arg)) \
|
||
SCM_SNARF_INIT(scm_set_smob_mark((tag), (c_name));)
|
||
|
||
#define SCM_SMOB_FREE(tag, c_name, arg) \
|
||
SCM_SNARF_HERE(static size_t c_name(SCM arg)) \
|
||
SCM_SNARF_INIT(scm_set_smob_free((tag), (c_name));)
|
||
|
||
#define SCM_GLOBAL_SMOB_FREE(tag, c_name, arg) \
|
||
SCM_SNARF_HERE(size_t c_name(SCM arg)) \
|
||
SCM_SNARF_INIT(scm_set_smob_free((tag), (c_name));)
|
||
|
||
#define SCM_SMOB_PRINT(tag, c_name, obj, port, pstate) \
|
||
SCM_SNARF_HERE(static int c_name(SCM obj, SCM port, scm_print_state* pstate)) \
|
||
SCM_SNARF_INIT(scm_set_smob_print((tag), (c_name));)
|
||
|
||
#define SCM_GLOBAL_SMOB_PRINT(tag, c_name, obj, port, pstate) \
|
||
SCM_SNARF_HERE(int c_name(SCM obj, SCM port, scm_print_state* pstate)) \
|
||
SCM_SNARF_INIT(scm_set_smob_print((tag), (c_name));)
|
||
|
||
#define SCM_SMOB_EQUALP(tag, c_name, obj1, obj2) \
|
||
SCM_SNARF_HERE(static SCM c_name(SCM obj1, SCM obj2)) \
|
||
SCM_SNARF_INIT(scm_set_smob_equalp((tag), (c_name));)
|
||
|
||
#define SCM_GLOBAL_SMOB_EQUALP(tag, c_name, obj1, obj2) \
|
||
SCM_SNARF_HERE(SCM c_name(SCM obj1, SCM obj2)) \
|
||
SCM_SNARF_INIT(scm_set_smob_equalp((tag), (c_name));)
|
||
|
||
#define SCM_SMOB_APPLY(tag, c_name, req, opt, rest, arglist) \
|
||
SCM_SNARF_HERE(static SCM c_name arglist) \
|
||
SCM_SNARF_INIT(scm_set_smob_apply((tag), (c_name), (req), (opt), (rest));)
|
||
|
||
#define SCM_GLOBAL_SMOB_APPLY(tag, c_name, req, opt, rest, arglist) \
|
||
SCM_SNARF_HERE(SCM c_name arglist) \
|
||
SCM_SNARF_INIT(scm_set_smob_apply((tag), (c_name), (req), (opt), (rest));)
|
||
|
||
|
||
/* Low-level snarfing for static memory allocation. */
|
||
|
||
#ifdef SCM_SUPPORT_STATIC_ALLOCATION
|
||
|
||
#define SCM_IMMUTABLE_DOUBLE_CELL(c_name, car, cbr, ccr, cdr) \
|
||
static SCM_ALIGNED (8) SCM_UNUSED const scm_t_cell \
|
||
c_name ## _raw_cell [2] = \
|
||
{ \
|
||
{ SCM_PACK (car), SCM_PACK (cbr) }, \
|
||
{ SCM_PACK (ccr), SCM_PACK (cdr) } \
|
||
}; \
|
||
static SCM_UNUSED const SCM c_name = SCM_PACK (& c_name ## _raw_cell)
|
||
|
||
#define SCM_IMMUTABLE_STRINGBUF(c_name, contents) \
|
||
static SCM_UNUSED const \
|
||
struct \
|
||
{ \
|
||
scm_t_bits word_0; \
|
||
scm_t_bits word_1; \
|
||
const char buffer[sizeof (contents)]; \
|
||
} \
|
||
c_name = \
|
||
{ \
|
||
scm_tc7_stringbuf | SCM_I_STRINGBUF_F_SHARED, \
|
||
sizeof (contents) - 1, \
|
||
contents \
|
||
}
|
||
|
||
#define SCM_IMMUTABLE_STRING(c_name, contents) \
|
||
SCM_IMMUTABLE_STRINGBUF (scm_i_paste (c_name, _stringbuf), contents); \
|
||
SCM_IMMUTABLE_DOUBLE_CELL (c_name, \
|
||
scm_tc7_ro_string, \
|
||
(scm_t_bits) &scm_i_paste (c_name, \
|
||
_stringbuf), \
|
||
(scm_t_bits) 0, \
|
||
(scm_t_bits) sizeof (contents) - 1)
|
||
|
||
#define SCM_IMMUTABLE_SUBR(c_name, name, req, opt, rest, fcn) \
|
||
static SCM_UNUSED SCM scm_i_paste (c_name, _meta_info)[2] = \
|
||
{ \
|
||
SCM_BOOL_F, /* The name, initialized at run-time. */ \
|
||
SCM_EOL /* The procedure properties. */ \
|
||
}; \
|
||
SCM_IMMUTABLE_DOUBLE_CELL (c_name, \
|
||
SCM_SUBR_ARITY_TO_TYPE (req, opt, rest), \
|
||
(scm_t_bits) fcn, \
|
||
(scm_t_bits) 0 /* no generic */, \
|
||
(scm_t_bits) & scm_i_paste (c_name, _meta_info));
|
||
|
||
#endif /* SCM_SUPPORT_STATIC_ALLOCATION */
|
||
|
||
|
||
/* Documentation. */
|
||
|
||
#ifdef SCM_MAGIC_SNARF_DOCS
|
||
#undef SCM_ASSERT
|
||
#define SCM_ASSERT(_cond, _arg, _pos, _subr) ^^ argpos _arg _pos __LINE__ ^^
|
||
#endif /* SCM_MAGIC_SNARF_DOCS */
|
||
|
||
#endif /* SCM_SNARF_H */
|
||
|
||
/*
|
||
Local Variables:
|
||
c-file-style: "gnu"
|
||
End:
|
||
*/
|