X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fly-smobs.icc;h=efbdb0647b70ffa9de382348f29637aac14e8bc5;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=2475b8ca751daebe3db6e80163dc75013dd2b378;hpb=75eebcb49e52d296b1da3e1074e0825d2c780db4;p=lilypond.git diff --git a/lily/include/ly-smobs.icc b/lily/include/ly-smobs.icc index 2475b8ca75..efbdb0647b 100644 --- a/lily/include/ly-smobs.icc +++ b/lily/include/ly-smobs.icc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1999--2006 Han-Wen Nienhuys + (c) 1999--2008 Han-Wen Nienhuys */ #ifndef LY_SMOBS_ICC @@ -25,6 +25,14 @@ ADD_SCM_INIT_FUNC (init_type_ ## CL, init_type_ ## CL) #define IMPLEMENT_BASE_SMOBS(CL) \ + void \ + CL ## _type_adder () \ + {\ + ly_add_type_predicate ((void*) &CL::unsmob, #CL); \ + }\ + ADD_SCM_INIT_FUNC(CL ## _type_adder_ctor, \ + CL ## _type_adder);\ + const char *CL::smob_name_ = #CL; \ scm_t_bits CL::smob_tag_; \ SCM \ CL::smob_p (SCM s) \ @@ -74,8 +82,8 @@ void \ CL::smobify_self () \ { \ - self_scm_ = unprotected_smobify_self (); \ protection_cons_ = SCM_EOL; \ + self_scm_ = unprotected_smobify_self (); \ protect (); \ } \ void \ @@ -86,7 +94,7 @@ SCM \ CL::unprotect () \ { \ - unprotect_smob (&protection_cons_); \ + unprotect_smob (self_scm_, &protection_cons_); \ return self_scm_; \ } \ SCM \ @@ -96,9 +104,10 @@ This is local. We don't assign to self_scm_ directly, to assure \ that S isn't GC-ed from under us. \ \ - We don't use smobbed_self () to ensure that mark_smob () doesn't have to \ - deal half-initialized objects: scm_done_malloc ( ) might trigger GC. \ - the warning in smobs.hh is just to be doubleplus goodly sure \ + We don't use smobbed_self () to ensure that mark_smob () doesn't \ + have to deal half-initialized objects: scm_done_malloc ( ) might \ + trigger GC.the warning in smobs.hh is just to be doubleplus \ + goodly sure \ */ \ SCM s; \ SCM_NEWSMOB (s, CL::smob_tag_, this); \