source file of the GNU LilyPond music typesetter
- (c) 2002--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 2002--2009 Han-Wen Nienhuys <hanwen@xs4all.nl>
*/
#include "lily-guile.hh"
#include "warn.hh"
#include "main.hh"
-#include "string.hh"
+#include "std-string.hh"
#include "protected-scm.hh"
#ifdef MODULE_GC_KLUDGE
Protected_scm anonymous_modules = SCM_EOL;
+bool perform_gc_kludge;
#endif
void
clear_anonymous_modules ()
{
+#ifdef MODULE_GC_KLUDGE
for (SCM s = anonymous_modules;
scm_is_pair (s);
s = scm_cdr (s))
}
anonymous_modules = SCM_EOL;
+#endif
}
SCM
}
#ifdef MODULE_GC_KLUDGE
- anonymous_modules = scm_cons (mod, anonymous_modules);
+ if (perform_gc_kludge)
+ anonymous_modules = scm_cons (mod, anonymous_modules);
#endif
return mod;
#define FUNC_NAME __FUNCTION__
-static SCM
-accumulate_symbol (void *closure, SCM key, SCM val, SCM result)
-{
- (void) closure;
- (void) val;
- return scm_cons (key, result);
-}
+
SCM
ly_module_symbols (SCM mod)
SCM_VALIDATE_MODULE (1, mod);
SCM obarr = SCM_MODULE_OBARRAY (mod);
- return scm_internal_hash_fold ((Hash_closure_function) & accumulate_symbol,
- NULL, SCM_EOL, obarr);
+ return ly_hash_table_keys (obarr);
}
static SCM
-entry_to_alist (void *closure, SCM key, SCM val, SCM result)
+entry_to_alist (void * /* closure */,
+ SCM key,
+ SCM val,
+ SCM result)
{
- (void) closure;
if (scm_variable_bound_p (val) == SCM_BOOL_T)
return scm_cons (scm_cons (key, scm_variable_ref (val)), result);
programming_error ("unbound variable in module");
return result;
}
-LY_DEFINE (ly_module2alist, "ly:module->alist",
+LY_DEFINE (ly_module_2_alist, "ly:module->alist",
1, 0, 0, (SCM mod),
- "Dump the contents of module @var{mod} as an alist.")
+ "Dump the contents of module @var{mod} as an alist.")
{
SCM_VALIDATE_MODULE (1, mod);
SCM obarr = SCM_MODULE_OBARRAY (mod);
#ifdef MODULE_GC_KLUDGE
static SCM
-redefine_keyval (void *closure, SCM key, SCM val, SCM result)
+redefine_keyval (void * /* closure */,
+ SCM key,
+ SCM val,
+ SCM result)
{
- (void)closure;
SCM new_tab = result;
scm_hashq_set_x (new_tab, key, val);
return new_tab;
void
make_stand_in_procs_weak ()
{
- if (SCM_IS_WHVEC_ANY(scm_stand_in_procs))
- return;
+ /*
+ Ugh, ABI breakage for 1.6.5: scm_stand_in_procs is a hashtab from
+ 1.6.5 on.
+ */
+ if (scm_is_pair (scm_stand_in_procs))
+ {
+ return;
+ }
+
+ if (scm_weak_key_hash_table_p (scm_stand_in_procs) == SCM_BOOL_T)
+ {
+#if (SCM_MINOR_VERSION == 7)
+ perform_gc_kludge = false;
+#endif
+ return;
+ }
+
+
+ perform_gc_kludge = true;
+
SCM old_tab = scm_stand_in_procs;
SCM new_tab = scm_make_weak_key_hash_table (scm_from_int (257));