2 ly-module.cc -- implement guile module stuff.
4 source file of the GNU LilyPond music typesetter
6 (c) 2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
11 #include "lily-guile.hh"
12 #include "ly-modules.hh"
14 static int module_count;
17 ly_init_anonymous_module (void * data)
19 scm_c_use_module ("lily");
23 ly_make_anonymous_module ()
25 String s = "*anonymous-ly-" + to_string (module_count++) + "*";
26 SCM mod = scm_c_define_module (s.to_str0(), ly_init_anonymous_module, 0);
31 ly_copy_module_variables (SCM dest, SCM src)
33 SCM obarr= SCM_MODULE_OBARRAY(src);
36 for (int i = 0; i < SCM_VECTOR_LENGTH (obarr); i++)
38 for( SCM s = scm_vector_ref(obarr, SCM_MAKINUM (i));
39 gh_pair_p (s); s = gh_cdr (s))
41 scm_module_define (dest, gh_caar (s), scm_variable_ref (gh_cdar(s)));
47 ly_module_symbols (SCM mod)
49 SCM obarr= SCM_MODULE_OBARRAY(mod);
52 for (int i = 0; i < SCM_VECTOR_LENGTH (obarr); i++)
54 for( SCM s = scm_vector_ref(obarr, SCM_MAKINUM (i));
55 gh_pair_p (s); s = gh_cdr (s))
57 syms = scm_cons (gh_caar (s), syms);
66 ly_module_to_alist (SCM mod)
68 SCM obarr= SCM_MODULE_OBARRAY(mod);
71 for (int i = 0; i < SCM_VECTOR_LENGTH (obarr); i++)
73 for( SCM s = scm_vector_ref(obarr, SCM_MAKINUM (i));
74 gh_pair_p (s); s = gh_cdr (s))
76 alist = scm_acons (gh_caar (s), scm_variable_ref (gh_cdar (s)),
84 Lookup SYM, but don't give error when it is not defined.
87 ly_module_lookup (SCM module, SCM sym)
90 #define FUNC_NAME __FUNCTION__
91 SCM_VALIDATE_MODULE (1, module);
93 var = scm_sym2var (sym, scm_module_lookup_closure (module), SCM_BOOL_F);
100 ly_export (SCM module, SCM namelist)
102 if (!export_function)
104 export_function = scm_permanent_object (scm_c_lookup ("module-export!"));
107 scm_call_2 (SCM_VARIABLE_REF (export_function),
112 ly_reexport_module (SCM mod)
114 ly_export (mod, ly_module_symbols (mod));