X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fly-smobs.icc;h=59429c2517735aaf3a5b8d3f86167d27dd5fea1c;hb=7c99507d1fab4e99a60f490469a8d3221ac036db;hp=f5b8f62c10849711af81da720f10722bfb34e5e3;hpb=5c2afd9ecbe4d91998a325f6323f05ea4d658d96;p=lilypond.git diff --git a/lily/include/ly-smobs.icc b/lily/include/ly-smobs.icc index f5b8f62c10..59429c2517 100644 --- a/lily/include/ly-smobs.icc +++ b/lily/include/ly-smobs.icc @@ -3,8 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1999--2000 Han-Wen Nienhuys - + (c) 1999--2004 Han-Wen Nienhuys */ #ifndef LY_SMOBS_ICC @@ -14,11 +13,13 @@ #define IMPLEMENT_TYPE_P(CL, FUNCNAME)\ -void init_type_p_ ## CL ()\ +void init_type_ ## CL ()\ {\ - scm_c_define_gsubr (FUNCNAME, 1, 0, 0, (Scheme_function_unknown) CL::smob_p);\ + SCM subr = scm_c_define_gsubr (FUNCNAME, 1, 0, 0, (Scheme_function_unknown) CL::smob_p);\ + ly_add_function_documentation (subr, FUNCNAME, "(SCM x)", "Check if @var{x} is a @code{" #CL "} object");\ + scm_c_export (FUNCNAME, NULL);\ }\ -ADD_SCM_INIT_FUNC (init_type_p_ ## CL, init_type_p_ ## CL) +ADD_SCM_INIT_FUNC (init_type_ ## CL, init_type_ ## CL) #ifndef SCM_CELL_TYPE #define SCM_CELL_TYPE(X) SCM_CAR (X) @@ -29,6 +30,7 @@ ADD_SCM_INIT_FUNC (init_type_p_ ## CL, init_type_p_ ## CL) #endif + #define IMPLEMENT_SIMPLE_SMOBS(CL) \ scm_t_bits CL::smob_tag_; \ SCM \ @@ -53,7 +55,7 @@ SCM CL::smobbed_self () const \ { \ SCM s; \ s = gh_cons (SCM_PACK (CL::smob_tag_), SCM_PACK (this)); \ - scm_done_malloc (sizeof (CL)); \ + scm_gc_register_collectable_memory ((CL*)this, sizeof (CL), #CL " smob"); \ \ return s; \ } \ @@ -61,9 +63,10 @@ size_t \ CL::free_smob (SCM ses) \ { \ CL * s = (CL*) SCM_CDR (ses); \ - delete s; \ - return sizeof (CL); \ -} \ + delete s; \ + scm_gc_unregister_collectable_memory (s, sizeof (CL), #CL " smob"); \ + return SMOB_FREE_RETURN_VAL(CL);\ +}\ ADD_SCM_INIT_FUNC (CL, CL::init_smobs) #define IMPLEMENT_SMOBS(CL) \ @@ -86,12 +89,10 @@ CL::unprotected_smobify_self () \ 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_NEWCELL (s); \ - SCM_SETCAR (s,CL::smob_tag_); \ - SCM_SETCDR (s, SCM_PACK (this)); \ + SCM s;\ + SCM_NEWSMOB (s, CL::smob_tag_, this);\ self_scm_ = s; \ - scm_done_malloc (sizeof (CL)); \ + scm_gc_register_collectable_memory (this, sizeof (CL), #CL " smob"); \ return s; \ }