Next: , Previous: Initialization, Up: API Reference


5.4 Snarfing Macros

The following macros do two different things: when compiled normally, they expand in one way; when processed during snarfing, they cause the guile-snarf program to pick up some initialization code, See 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 guile-snarf.

— C Macro: SCM_SNARF_INIT (code)

Normally, SCM_SNARF_INIT expands to nothing; while snarfing, it causes 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.

— C Macro: SCM_DEFINE (c_name, scheme_name, req, opt, var, arglist, docstring)

Normally, this macro expands into

          static const char s_c_name[] = scheme_name;
          SCM
          c_name arglist
     

While snarfing, it causes

          scm_c_define_gsubr (s_c_name, req, opt, var,
                              c_name);
     

to be added to the initialization actions. Thus, you can use it to declare a C function named c_name that will be made available to Scheme with the name scheme_name.

Note that the arglist argument must have parentheses around it.

— C Macro: SCM_SYMBOL (c_name, scheme_name)
— C Macro: SCM_GLOBAL_SYMBOL (c_name, scheme_name)

Normally, these macros expand into

          static SCM c_name
     

or

          SCM c_name
     

respectively. While snarfing, they both expand into the initialization code

          c_name = scm_permanent_object (scm_from_locale_symbol (scheme_name));
     

Thus, you can use them declare a static or global variable of type SCM that will be initialized to the symbol named scheme_name.

— C Macro: SCM_KEYWORD (c_name, scheme_name)
— C Macro: SCM_GLOBAL_KEYWORD (c_name, scheme_name)

Normally, these macros expand into

          static SCM c_name
     

or

          SCM c_name
     

respectively. While snarfing, they both expand into the initialization code

          c_name = scm_permanent_object (scm_c_make_keyword (scheme_name));
     

Thus, you can use them declare a static or global variable of type SCM that will be initialized to the keyword named scheme_name.

— C Macro: SCM_VARIABLE (c_name, scheme_name)
— C Macro: SCM_GLOBAL_VARIABLE (c_name, scheme_name)

These macros are equivalent to SCM_VARIABLE_INIT and SCM_GLOBAL_VARIABLE_INIT, respectively, with a value of SCM_BOOL_F.

— C Macro: SCM_VARIABLE_INIT (c_name, scheme_name, value)
— C Macro: SCM_GLOBAL_VARIABLE_INIT (c_name, scheme_name, value)

Normally, these macros expand into

          static SCM c_name
     

or

          SCM c_name
     

respectively. While snarfing, they both expand into the initialization code

          c_name = scm_permanent_object (scm_c_define (scheme_name, value));
     

Thus, you can use them declare a static or global C variable of type SCM that will be initialized to the object representing the Scheme variable named scheme_name in the current module. The variable will be defined when it doesn't already exist. It is always set to value.