2 ly-module.cc -- implement guile module stuff.
4 source file of the GNU LilyPond music typesetter
6 (c) 2002--2003 Han-Wen Nienhuys <hanwen@cs.uu.nl>
11 #include "lily-guile.hh"
12 #include "ly-modules.hh"
13 #include "protected-scm.hh"
15 #define FUNC_NAME __FUNCTION__
17 static int module_count
;
20 ly_init_anonymous_module (void * data
)
22 scm_c_use_module ("lily");
25 Protected_scm anon_modules
;
28 ly_make_anonymous_module ()
30 String s
= "*anonymous-ly-" + to_string (module_count
++) + "*";
31 SCM mod
= scm_c_define_module (s
.to_str0(), ly_init_anonymous_module
, 0);
33 anon_modules
= scm_cons (mod
, anon_modules
);
38 ly_clear_anonymous_modules ()
41 anon_modules
= SCM_EOL
;
43 for (; gh_pair_p (s
) ; s
= gh_cdr (s
))
45 scm_vector_fill_x (SCM_MODULE_OBARRAY(gh_car(s
)), SCM_EOL
);
49 #define FUNC_NAME __FUNCTION__
52 ly_copy_module_variables (SCM dest
, SCM src
)
54 SCM_VALIDATE_MODULE (1, src
);
56 SCM obarr
= SCM_MODULE_OBARRAY(src
);
59 for (int i
= 0; i
< SCM_VECTOR_LENGTH (obarr
); i
++)
61 for( SCM s
= scm_vector_ref(obarr
, SCM_MAKINUM (i
));
62 gh_pair_p (s
); s
= gh_cdr (s
))
64 scm_module_define (dest
, gh_caar (s
), scm_variable_ref (gh_cdar(s
)));
70 ly_module_symbols (SCM mod
)
72 SCM_VALIDATE_MODULE (1, mod
);
74 SCM obarr
= SCM_MODULE_OBARRAY(mod
);
77 for (int i
= 0; i
< SCM_VECTOR_LENGTH (obarr
); i
++)
79 for( SCM s
= scm_vector_ref(obarr
, SCM_MAKINUM (i
));
80 gh_pair_p (s
); s
= gh_cdr (s
))
82 syms
= scm_cons (gh_caar (s
), syms
);
91 ly_module_to_alist (SCM mod
)
93 SCM_VALIDATE_MODULE (1, mod
);
96 SCM obarr
= SCM_MODULE_OBARRAY(mod
);
99 for (int i
= 0; i
< SCM_VECTOR_LENGTH (obarr
); i
++)
101 for( SCM s
= scm_vector_ref(obarr
, SCM_MAKINUM (i
));
102 gh_pair_p (s
); s
= gh_cdr (s
))
104 alist
= scm_acons (gh_caar (s
), scm_variable_ref (gh_cdar (s
)),
112 Lookup SYM, but don't give error when it is not defined.
115 ly_module_lookup (SCM module
, SCM sym
)
117 #define FUNC_NAME __FUNCTION__
118 SCM_VALIDATE_MODULE (1, module
);
120 return scm_sym2var (sym
, scm_module_lookup_closure (module
), SCM_BOOL_F
);
123 SCM export_function
;
126 ly_export (SCM module
, SCM namelist
)
128 if (!export_function
)
130 export_function
= scm_permanent_object (scm_c_lookup ("module-export!"));
133 scm_call_2 (SCM_VARIABLE_REF (export_function
),
138 ly_reexport_module (SCM mod
)
140 ly_export (mod
, ly_module_symbols (mod
));