mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-11 14:21:10 +02:00
(scm_c_export): Do nothing when the first argument is
already the terminating NULL. Thanks to Han-Wen Nienhuys!
This commit is contained in:
parent
19a35d19d9
commit
eb880cef29
1 changed files with 30 additions and 13 deletions
|
@ -176,24 +176,41 @@ scm_c_use_module (const char *name)
|
||||||
|
|
||||||
static SCM module_export_x_var;
|
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
|
void
|
||||||
scm_c_export (const char *name, ...)
|
scm_c_export (const char *name, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
if (name)
|
||||||
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 *);
|
va_list ap;
|
||||||
if (n == NULL)
|
SCM names = scm_cons (scm_str2symbol (name), SCM_EOL);
|
||||||
break;
|
SCM *tail = SCM_CDRLOC (names);
|
||||||
*tail = scm_cons (scm_str2symbol (n), SCM_EOL);
|
va_start (ap, name);
|
||||||
tail = SCM_CDRLOC (*tail);
|
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 */
|
/* Environments */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue