X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fsmobs.cc;h=c700ea0d9b0f0a81d7e3f5d40774f5a85236b756;hb=5d84bfad4626892bcffd05adcced53c8a2329047;hp=f599a51a289215faaeca991074ffb6a19207d40b;hpb=e7aa6c445f463844dbaa52d38ea4aac2882b5601;p=lilypond.git diff --git a/lily/smobs.cc b/lily/smobs.cc index f599a51a28..c700ea0d9b 100644 --- a/lily/smobs.cc +++ b/lily/smobs.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2014 Han-Wen Nienhuys + Copyright (C) 2005--2015 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,6 +18,13 @@ */ #include "smobs.hh" +#include "listener.hh" + +Listener +Smob_core::get_listener (SCM callback) +{ + return Listener (callback, self_scm ()); +} /* The CDR contains the actual protected list. @@ -46,7 +53,7 @@ protect_smob (SCM smob, SCM *prot_cons) { #if 0 SCM s = scm_cdr (smob_protection_list); - while (scm_is_pair (s) && scm_car (s) == SCM_BOOL_F) + while (scm_is_pair (s) && scm_is_false (scm_car (s)) { s = scm_cdr (s); } @@ -69,13 +76,13 @@ unprotect_smob (SCM smob, SCM *prot_cons) #else SCM next = scm_cdr (*prot_cons); - if (next == SCM_EOL) + if (scm_is_null (next))) scm_set_car_x (*prot_cons, SCM_BOOL_F); else { scm_set_car_x (*prot_cons, SCM_BOOL_F); while (scm_is_pair (next) - && scm_car (next) == SCM_BOOL_F) + && scm_is_false (scm_car (next))) next = scm_cdr (next); @@ -85,3 +92,13 @@ unprotect_smob (SCM smob, SCM *prot_cons) *prot_cons = SCM_EOL; #endif } + + +Scm_init const *Scm_init::list_ = 0; + +void +Scm_init::init () +{ + for (Scm_init const *p = list_; p; p = p->next_) + p->fun_ (); +}