X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fly-smobs.icc;h=efbdb0647b70ffa9de382348f29637aac14e8bc5;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=3a02164952960d7ef7f2e6e1eb0479fa8dd3fcd4;hpb=0d3c78505a6adb958f9280509bb7fa170de54611;p=lilypond.git diff --git a/lily/include/ly-smobs.icc b/lily/include/ly-smobs.icc index 3a02164952..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--2005 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) \ @@ -64,29 +72,30 @@ CL *ptr = new CL (*this); \ SCM s; \ s = scm_cons (SCM_PACK (CL::smob_tag_), SCM_PACK (ptr)); \ - /* scm_gc_register_collectable_memory ((CL *)this, sizeof (CL), #CL " smob");*/ \ + scm_gc_register_collectable_memory ((CL *)this, sizeof (CL), #CL " smob"); \ \ return s; \ } #define IMPLEMENT_SMOBS(CL) \ IMPLEMENT_BASE_SMOBS (CL) \ - void \ + void \ CL::smobify_self () \ { \ + protection_cons_ = SCM_EOL; \ self_scm_ = unprotected_smobify_self (); \ - protection_cons_ = SCM_EOL;\ - protect();\ - }\ - void\ - CL::protect(){ \ - protect_smob (self_scm_, &protection_cons_);\ - }\ - SCM\ - CL::unprotect ()\ - {\ - unprotect_smob (&protection_cons_);\ - return self_scm_;\ + protect (); \ + } \ + void \ + CL::protect () \ + { \ + protect_smob (self_scm_, &protection_cons_); \ + } \ + SCM \ + CL::unprotect () \ + { \ + unprotect_smob (self_scm_, &protection_cons_); \ + return self_scm_; \ } \ SCM \ CL::unprotected_smobify_self () \ @@ -95,14 +104,15 @@ 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); \ self_scm_ = s; \ - /* scm_gc_register_collectable_memory (this, sizeof (CL), #CL " smob");*/ \ + scm_gc_register_collectable_memory (this, sizeof (CL), #CL " smob"); \ return s; \ }