123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- @c -*-texinfo-*-
- @c This is part of the GNU Guile Reference Manual.
- @c Copyright (C) 1996, 1997, 2000, 2001, 2002, 2003, 2004
- @c Free Software Foundation, Inc.
- @c See the file guile.texi for copying conditions.
- @node Snarfing Macros
- @section Snarfing Macros
- @cindex guile-snarf recognized macros
- @cindex guile-snarf deprecated macros
- The following macros do two different things: when compiled normally,
- they expand in one way; when processed during snarfing, they cause the
- @code{guile-snarf} program to pick up some initialization code,
- @xref{Function Snarfing}.
- The descriptions below use the term `normally' to refer to the case
- when the code is compiled normally, and `while snarfing' when the code
- is processed by @code{guile-snarf}.
- @deffn {C Macro} SCM_SNARF_INIT (code)
- Normally, @code{SCM_SNARF_INIT} expands to nothing; while snarfing, it
- causes @var{code} to be included in the initialization action file,
- followed by a semicolon.
- This is the fundamental macro for snarfing initialization actions.
- The more specialized macros below use it internally.
- @end deffn
- @deffn {C Macro} SCM_DEFINE (c_name, scheme_name, req, opt, var, arglist, docstring)
- Normally, this macro expands into
- @smallexample
- static const char s_@var{c_name}[] = @var{scheme_name};
- SCM
- @var{c_name} @var{arglist}
- @end smallexample
- While snarfing, it causes
- @smallexample
- scm_c_define_gsubr (s_@var{c_name}, @var{req}, @var{opt}, @var{var},
- @var{c_name});
- @end smallexample
- to be added to the initialization actions. Thus, you can use it to
- declare a C function named @var{c_name} that will be made available to
- Scheme with the name @var{scheme_name}.
- Note that the @var{arglist} argument must have parentheses around it.
- @end deffn
- @deffn {C Macro} SCM_SYMBOL (c_name, scheme_name)
- @deffnx {C Macro} SCM_GLOBAL_SYMBOL (c_name, scheme_name)
- Normally, these macros expand into
- @smallexample
- static SCM @var{c_name}
- @end smallexample
- or
- @smallexample
- SCM @var{c_name}
- @end smallexample
- respectively. While snarfing, they both expand into the
- initialization code
- @smallexample
- @var{c_name} = scm_permanent_object (scm_from_locale_symbol (@var{scheme_name}));
- @end smallexample
- Thus, you can use them declare a static or global variable of type
- @code{SCM} that will be initialized to the symbol named
- @var{scheme_name}.
- @end deffn
- @deffn {C Macro} SCM_KEYWORD (c_name, scheme_name)
- @deffnx {C Macro} SCM_GLOBAL_KEYWORD (c_name, scheme_name)
- Normally, these macros expand into
- @smallexample
- static SCM @var{c_name}
- @end smallexample
- or
- @smallexample
- SCM @var{c_name}
- @end smallexample
- respectively. While snarfing, they both expand into the
- initialization code
- @smallexample
- @var{c_name} = scm_permanent_object (scm_c_make_keyword (@var{scheme_name}));
- @end smallexample
- Thus, you can use them declare a static or global variable of type
- @code{SCM} that will be initialized to the keyword named
- @var{scheme_name}.
- @end deffn
- @deffn {C Macro} SCM_VARIABLE (c_name, scheme_name)
- @deffnx {C Macro} SCM_GLOBAL_VARIABLE (c_name, scheme_name)
- These macros are equivalent to @code{SCM_VARIABLE_INIT} and
- @code{SCM_GLOBAL_VARIABLE_INIT}, respectively, with a @var{value} of
- @code{SCM_BOOL_F}.
- @end deffn
- @deffn {C Macro} SCM_VARIABLE_INIT (c_name, scheme_name, value)
- @deffnx {C Macro} SCM_GLOBAL_VARIABLE_INIT (c_name, scheme_name, value)
- Normally, these macros expand into
- @smallexample
- static SCM @var{c_name}
- @end smallexample
- or
- @smallexample
- SCM @var{c_name}
- @end smallexample
- respectively. While snarfing, they both expand into the
- initialization code
- @smallexample
- @var{c_name} = scm_permanent_object (scm_c_define (@var{scheme_name}, @var{value}));
- @end smallexample
- Thus, you can use them declare a static or global C variable of type
- @code{SCM} that will be initialized to the object representing the
- Scheme variable named @var{scheme_name} in the current module. The
- variable will be defined when it doesn't already exist. It is always
- set to @var{value}.
- @end deffn
|