From 3aad311dbc1f877b9408e17b6aeea80d6fb62d50 Mon Sep 17 00:00:00 2001 From: hanwen Date: Sat, 16 Jul 2005 13:25:52 +0000 Subject: [PATCH] *** empty log message *** --- lily/grob-smob.cc | 75 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 lily/grob-smob.cc diff --git a/lily/grob-smob.cc b/lily/grob-smob.cc new file mode 100644 index 0000000000..556b68bedb --- /dev/null +++ b/lily/grob-smob.cc @@ -0,0 +1,75 @@ +/* + grob-smob.cc -- implement GROB smob routines. + + source file of the GNU LilyPond music typesetter + + (c) 2005 Han-Wen Nienhuys + +*/ + + +#include "grob.hh" + +#include "paper-score.hh" + +#include "ly-smobs.icc" + +IMPLEMENT_SMOBS (Grob); +IMPLEMENT_DEFAULT_EQUAL_P (Grob); + +SCM +Grob::mark_smob (SCM ses) +{ + Grob *s = (Grob *) SCM_CELL_WORD_1 (ses); + scm_gc_mark (s->immutable_property_alist_); + + if (s->key_) + scm_gc_mark (s->key_->self_scm ()); + for (int a = 0; a < 2; a++) + { + scm_gc_mark (s->dim_cache_[a].offset_callbacks_); + scm_gc_mark (s->dim_cache_[a].dimension_); + scm_gc_mark (s->dim_cache_[a].dimension_callback_); + + /* Do not mark the parents. The pointers in the mutable + property list form two tree like structures (one for X + relations, one for Y relations). Marking these can be done + in limited stack space. If we add the parents, we will jump + between X and Y in an erratic manner, leading to much more + recursion depth (and core dumps if we link to pthreads). */ + } + + if (s->original_) + scm_gc_mark (s->original_->self_scm ()); + + if (s->pscore_) + scm_gc_mark (s->pscore_->self_scm ()); + + s->do_derived_mark (); + scm_gc_mark (s->object_alist_); + scm_gc_mark (s->interfaces_); + + return s->mutable_property_alist_; +} + +int +Grob::print_smob (SCM s, SCM port, scm_print_state *) +{ + Grob *sc = (Grob *) SCM_CELL_WORD_1 (s); + + scm_puts ("#name ().to_str0 (), port); + + /* Do not print properties, that is too much hassle. */ + scm_puts (" >", port); + return 1; +} + +SCM +Grob::do_derived_mark () const +{ + return SCM_EOL; +} + +IMPLEMENT_TYPE_P (Grob, "ly:grob?"); + -- 2.39.5