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"
13 #define FUNC_NAME __FUNCTION__
15 static int module_count;
18 ly_init_anonymous_module (void * data)
20 scm_c_use_module ("lily");
24 ly_make_anonymous_module ()
26 String s = "*anonymous-ly-" + to_string (module_count++) + "*";
27 SCM mod = scm_c_define_module (s.to_str0(), ly_init_anonymous_module, 0);
32 ly_copy_module_variables (SCM dest, SCM src)
34 #define FUNC_NAME __FUNCTION__
35 SCM_VALIDATE_MODULE (1, src);
37 SCM obarr= SCM_MODULE_OBARRAY(src);
40 for (int i = 0; i < SCM_VECTOR_LENGTH (obarr); i++)
42 for( SCM s = scm_vector_ref(obarr, SCM_MAKINUM (i));
43 gh_pair_p (s); s = gh_cdr (s))
45 scm_module_define (dest, gh_caar (s), scm_variable_ref (gh_cdar(s)));
51 ly_module_symbols (SCM mod)
53 SCM_VALIDATE_MODULE (1, mod);
55 SCM obarr= SCM_MODULE_OBARRAY(mod);
58 for (int i = 0; i < SCM_VECTOR_LENGTH (obarr); i++)
60 for( SCM s = scm_vector_ref(obarr, SCM_MAKINUM (i));
61 gh_pair_p (s); s = gh_cdr (s))
63 syms = scm_cons (gh_caar (s), syms);
72 ly_module_to_alist (SCM mod)
74 SCM_VALIDATE_MODULE (1, mod);
77 SCM obarr= SCM_MODULE_OBARRAY(mod);
80 for (int i = 0; i < SCM_VECTOR_LENGTH (obarr); i++)
82 for( SCM s = scm_vector_ref(obarr, SCM_MAKINUM (i));
83 gh_pair_p (s); s = gh_cdr (s))
85 alist = scm_acons (gh_caar (s), scm_variable_ref (gh_cdar (s)),
93 Lookup SYM, but don't give error when it is not defined.
96 ly_module_lookup (SCM module, SCM sym)
98 #define FUNC_NAME __FUNCTION__
99 SCM_VALIDATE_MODULE (1, module);
101 return scm_sym2var (sym, scm_module_lookup_closure (module), SCM_BOOL_F);
104 SCM export_function ;
107 ly_export (SCM module, SCM namelist)
109 if (!export_function)
111 export_function = scm_permanent_object (scm_c_lookup ("module-export!"));
114 scm_call_2 (SCM_VARIABLE_REF (export_function),
119 ly_reexport_module (SCM mod)
121 ly_export (mod, ly_module_symbols (mod));