diff options
Diffstat (limited to 'libguile/modules.c')
-rw-r--r-- | libguile/modules.c | 43 |
1 files changed, 30 insertions, 13 deletions
diff --git a/libguile/modules.c b/libguile/modules.c index 554b9f141..e88ff73ea 100644 --- a/libguile/modules.c +++ b/libguile/modules.c @@ -176,24 +176,41 @@ scm_c_use_module (const char *name) static SCM module_export_x_var; + + +/* + @code{scm_c_export}(@var{name-list}) + + @code{scm_c_export} exports the named bindings from the current + module, making them visible to users of the module. This function + takes a list of string arguments, terminated by NULL, e.g. + + @example + scm_c_export ("add-double-record", "bamboozle-money", NULL); + @end example +*/ + void scm_c_export (const char *name, ...) { - va_list ap; - SCM names = scm_cons (scm_str2symbol (name), SCM_EOL); - SCM *tail = SCM_CDRLOC (names); - va_start (ap, name); - while (1) + if (name) { - const char *n = va_arg (ap, const char *); - if (n == NULL) - break; - *tail = scm_cons (scm_str2symbol (n), SCM_EOL); - tail = SCM_CDRLOC (*tail); + va_list ap; + SCM names = scm_cons (scm_str2symbol (name), SCM_EOL); + SCM *tail = SCM_CDRLOC (names); + va_start (ap, name); + while (1) + { + const char *n = va_arg (ap, const char *); + if (n == NULL) + break; + *tail = scm_cons (scm_str2symbol (n), SCM_EOL); + tail = SCM_CDRLOC (*tail); + } + va_end (ap); + scm_call_2 (SCM_VARIABLE_REF (module_export_x_var), + scm_current_module (), names); } - va_end (ap); - scm_call_2 (SCM_VARIABLE_REF (module_export_x_var), - scm_current_module (), names); } /* Environments */ |