summaryrefslogtreecommitdiff
path: root/libguile/modules.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2010-04-23 17:03:34 +0200
committerAndy Wingo <wingo@pobox.com>2010-04-24 17:42:01 +0200
commit993dae8623e0fe6195000afb81902ea466bd2dc4 (patch)
treecfc275c59a3160ae9f4e9152845e8a1d5aafade9 /libguile/modules.c
parent81fc66cfb665814d9cfd766b3c19be90ae1b13ec (diff)
downloadguile-993dae8623e0fe6195000afb81902ea466bd2dc4.tar.gz
module-public-interface in Scheme
* libguile/modules.c: Consolidate all variables to the top of the file. (scm_module_public_interface): Dispatch to Scheme. (scm_post_boot_init_modules): Resolve module-public-interface. * module/ice-9/boot-9.scm (module-public-interface): Implement in Scheme.
Diffstat (limited to 'libguile/modules.c')
-rw-r--r--libguile/modules.c41
1 files changed, 13 insertions, 28 deletions
diff --git a/libguile/modules.c b/libguile/modules.c
index ccb68b709..c8a4c2aa1 100644
--- a/libguile/modules.c
+++ b/libguile/modules.c
@@ -44,7 +44,16 @@ scm_t_bits scm_module_tag;
static SCM the_module;
+static SCM module_make_local_var_x_var;
+
static SCM the_root_module_var;
+static SCM process_define_module_var;
+static SCM process_use_modules_var;
+static SCM resolve_module_var;
+static SCM module_public_interface_var;
+static SCM module_export_x_var;
+static SCM default_duplicate_binding_procedures_var;
+
static SCM unbound_variable (const char *func, SCM sym)
{
@@ -149,10 +158,6 @@ convert_module_name (const char *name)
return list;
}
-static SCM process_define_module_var;
-static SCM process_use_modules_var;
-static SCM resolve_module_var;
-
SCM
scm_c_resolve_module (const char *name)
{
@@ -183,8 +188,6 @@ scm_c_use_module (const char *name)
scm_list_1 (scm_list_1 (convert_module_name (name))));
}
-static SCM module_export_x_var;
-
SCM
scm_module_export (SCM module, SCM namelist)
{
@@ -267,12 +270,6 @@ scm_lookup_closure_module (SCM proc)
* release.
*/
-/* The `module-make-local-var!' variable. */
-static SCM module_make_local_var_x_var = SCM_UNSPECIFIED;
-
-/* The `default-duplicate-binding-procedures' variable. */
-static SCM default_duplicate_binding_procedures_var = SCM_UNSPECIFIED;
-
/* Return the list of default duplicate binding handlers (procedures). */
static inline SCM
default_duplicate_binding_handlers (void)
@@ -638,24 +635,11 @@ SCM_DEFINE (scm_module_import_interface, "module-import-interface", 2, 0, 0,
}
#undef FUNC_NAME
-SCM_SYMBOL (sym_sys_module_public_interface, "%module-public-interface");
-
-SCM_DEFINE (scm_module_public_interface, "module-public-interface", 1, 0, 0,
- (SCM module),
- "Return the public interface of @var{module}.\n\n"
- "If @var{module} has no public interface, @code{#f} is returned.")
-#define FUNC_NAME s_scm_module_public_interface
+SCM
+scm_module_public_interface (SCM module)
{
- SCM var;
-
- SCM_VALIDATE_MODULE (1, module);
- var = scm_module_local_variable (module, sym_sys_module_public_interface);
- if (scm_is_true (var))
- return SCM_VARIABLE_REF (var);
- else
- return SCM_BOOL_F;
+ return scm_call_1 (SCM_VARIABLE_REF (module_public_interface_var), module);
}
-#undef FUNC_NAME
/* scm_sym2var
*
@@ -899,6 +883,7 @@ scm_post_boot_init_modules ()
the_root_module_var = scm_c_lookup ("the-root-module");
default_duplicate_binding_procedures_var =
scm_c_lookup ("default-duplicate-binding-procedures");
+ module_public_interface_var = scm_c_lookup ("module-public-interface");
scm_module_system_booted_p = 1;
}