CVSROOT: /cvsroot/lilypond Module name: lilypond Branch: Changes by: Han-Wen Nienhuys <[EMAIL PROTECTED]> 05/07/24 15:30:03
Modified files: . : ChangeLog lily : all-font-metrics.cc auto-beam-engraver.cc book-scheme.cc book.cc completion-note-heads-engraver.cc context-def.cc context.cc folded-repeat-iterator.cc global-context-scheme.cc grob.cc key-engraver.cc lily-parser-scheme.cc lily-parser.cc music-iterator.cc music-scheme.cc music.cc object-key-dumper-scheme.cc object-key-undumper-scheme.cc object-key-undumper.cc output-def-scheme.cc paper-book.cc paper-def.cc paper-outputter-scheme.cc paper-score.cc parser.yy score-engraver.cc score-performer.cc score-scheme.cc score.cc system.cc translator-ctors.cc tweak-registration.cc lily/include : ly-smobs.icc music-iterator.hh smobs.hh Log message: (DECLARE_BASE_SMOBS): add methods protect() and unprotect(). Use throughout. CVSWeb URLs: http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/ChangeLog.diff?tr1=1.3919&tr2=1.3920&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/all-font-metrics.cc.diff?tr1=1.89&tr2=1.90&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/auto-beam-engraver.cc.diff?tr1=1.150&tr2=1.151&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/book-scheme.cc.diff?tr1=1.7&tr2=1.8&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/book.cc.diff?tr1=1.43&tr2=1.44&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/completion-note-heads-engraver.cc.diff?tr1=1.53&tr2=1.54&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/context-def.cc.diff?tr1=1.43&tr2=1.44&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/context.cc.diff?tr1=1.62&tr2=1.63&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/folded-repeat-iterator.cc.diff?tr1=1.37&tr2=1.38&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/global-context-scheme.cc.diff?tr1=1.9&tr2=1.10&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/grob.cc.diff?tr1=1.135&tr2=1.136&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/key-engraver.cc.diff?tr1=1.115&tr2=1.116&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/lily-parser-scheme.cc.diff?tr1=1.18&tr2=1.19&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/lily-parser.cc.diff?tr1=1.44&tr2=1.45&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/music-iterator.cc.diff?tr1=1.100&tr2=1.101&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/music-scheme.cc.diff?tr1=1.9&tr2=1.10&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/music.cc.diff?tr1=1.139&tr2=1.140&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/object-key-dumper-scheme.cc.diff?tr1=1.4&tr2=1.5&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/object-key-undumper-scheme.cc.diff?tr1=1.4&tr2=1.5&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/object-key-undumper.cc.diff?tr1=1.10&tr2=1.11&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/output-def-scheme.cc.diff?tr1=1.6&tr2=1.7&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/paper-book.cc.diff?tr1=1.111&tr2=1.112&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/paper-def.cc.diff?tr1=1.141&tr2=1.142&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/paper-outputter-scheme.cc.diff?tr1=1.9&tr2=1.10&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/paper-score.cc.diff?tr1=1.85&tr2=1.86&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/parser.yy.diff?tr1=1.482&tr2=1.483&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/score-engraver.cc.diff?tr1=1.150&tr2=1.151&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/score-performer.cc.diff?tr1=1.64&tr2=1.65&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/score-scheme.cc.diff?tr1=1.12&tr2=1.13&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/score.cc.diff?tr1=1.167&tr2=1.168&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/system.cc.diff?tr1=1.112&tr2=1.113&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/translator-ctors.cc.diff?tr1=1.43&tr2=1.44&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/tweak-registration.cc.diff?tr1=1.11&tr2=1.12&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/include/ly-smobs.icc.diff?tr1=1.38&tr2=1.39&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/include/music-iterator.hh.diff?tr1=1.66&tr2=1.67&r1=text&r2=text http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/include/smobs.hh.diff?tr1=1.23&tr2=1.24&r1=text&r2=text Patches: Index: lilypond/ChangeLog diff -u lilypond/ChangeLog:1.3919 lilypond/ChangeLog:1.3920 --- lilypond/ChangeLog:1.3919 Sun Jul 24 12:49:14 2005 +++ lilypond/ChangeLog Sun Jul 24 15:30:01 2005 @@ -1,3 +1,10 @@ +2005-07-24 Han-Wen Nienhuys <[EMAIL PROTECTED]> + + * lily/smobs.cc (protect_smob): experiment: O(1) GC (un)protection. + + * lily/include/smobs.hh (DECLARE_BASE_SMOBS): add methods + protect() and unprotect(). Use throughout. + 2005-07-24 Nicolas Sceaux <[EMAIL PROTECTED]> * Documentation/topdocs/NEWS.tely: new item for \displayLilyMusic Index: lilypond/lily/all-font-metrics.cc diff -u lilypond/lily/all-font-metrics.cc:1.89 lilypond/lily/all-font-metrics.cc:1.90 --- lilypond/lily/all-font-metrics.cc:1.89 Mon Jul 11 11:51:42 2005 +++ lilypond/lily/all-font-metrics.cc Sun Jul 24 15:30:02 2005 @@ -43,12 +43,12 @@ All_font_metrics::~All_font_metrics () { - scm_gc_unprotect_object (afm_dict_->self_scm ()); - scm_gc_unprotect_object (tfm_dict_->self_scm ()); - scm_gc_unprotect_object (otf_dict_->self_scm ()); + afm_dict_->unprotect (); + tfm_dict_->unprotect (); + otf_dict_->unprotect (); #if HAVE_PANGO_FT2 - scm_gc_unprotect_object (pango_dict_->self_scm ()); + pango_dict_->unprotect (); g_object_unref (pango_ft2_fontmap_); #endif } @@ -83,7 +83,7 @@ output_scale); val = pf->self_scm (); pango_dict_->set (key, val); - scm_gc_unprotect_object (val); + pf->unprotect (); if (be_verbose_global) progress_indication ("]"); @@ -158,7 +158,7 @@ progress_indication ("]"); afm_dict_->set (sname, val); - scm_gc_unprotect_object (val); + unsmob_metrics (val)->unprotect (); Adobe_font_metric *afm = dynamic_cast<Adobe_font_metric *> (unsmob_metrics (val)); @@ -224,7 +224,7 @@ unsmob_metrics (val)->description_ = scm_cons (name_string, scm_make_real (1.0)); otf_dict_->set (sname, val); - scm_gc_unprotect_object (val); + unsmob_metrics (val)->unprotect (); } return dynamic_cast<Open_type_font *> (unsmob_metrics (val)); @@ -266,7 +266,7 @@ unsmob_metrics (val)->description_ = scm_cons (name_string, scm_make_real (1.0)); tfm_dict_->set (sname, val); - scm_gc_unprotect_object (val); + unsmob_metrics (val)->unprotect (); } return dynamic_cast<Tex_font_metric *> (unsmob_metrics (val)); Index: lilypond/lily/auto-beam-engraver.cc diff -u lilypond/lily/auto-beam-engraver.cc:1.150 lilypond/lily/auto-beam-engraver.cc:1.151 --- lilypond/lily/auto-beam-engraver.cc:1.150 Sun Jul 24 01:33:35 2005 +++ lilypond/lily/auto-beam-engraver.cc Sun Jul 24 15:30:02 2005 @@ -177,17 +177,13 @@ if (to_boolean (get_property ("skipTypesetting"))) return 0; + for (int i = 0; i < stems_->size (); i++) + if (Stem::get_beam ((*stems_)[i])) + return 0; + Spanner *beam = new Spanner (beam_settings_, context ()->get_grob_key ("Beam")); for (int i = 0; i < stems_->size (); i++) { - /* - watch out for stem tremolos and abbreviation beams - */ - if (Stem::get_beam ((*stems_)[i])) - { - scm_gc_unprotect_object (beam->self_scm ()); - return 0; - } Beam::add_stem (beam, (*stems_)[i]); } @@ -306,6 +302,7 @@ void Auto_beam_engraver::acknowledge_beam (Grob_info info) { + (void)info; check_bar_property (); if (stems_) { @@ -316,6 +313,7 @@ void Auto_beam_engraver::acknowledge_bar_line (Grob_info info) { + (void)info; check_bar_property (); if (stems_) end_beam (); @@ -324,6 +322,7 @@ void Auto_beam_engraver::acknowledge_rest (Grob_info info) { + (void)info; check_bar_property (); if (stems_) end_beam (); Index: lilypond/lily/book-scheme.cc diff -u lilypond/lily/book-scheme.cc:1.7 lilypond/lily/book-scheme.cc:1.8 --- lilypond/lily/book-scheme.cc:1.7 Mon Jul 11 13:30:57 2005 +++ lilypond/lily/book-scheme.cc Sun Jul 24 15:30:02 2005 @@ -30,8 +30,9 @@ book->scores_ = scm_append (scm_list_2 (scores, book->scores_)); + SCM x = book->self_scm (); - scm_gc_unprotect_object (x); + book->unprotect (); return x; } @@ -58,7 +59,7 @@ if (pb) { pb->output (output); - scm_gc_unprotect_object (pb->self_scm ()); + pb->unprotect (); } return SCM_UNSPECIFIED; Index: lilypond/lily/book.cc diff -u lilypond/lily/book.cc:1.43 lilypond/lily/book.cc:1.44 --- lilypond/lily/book.cc:1.43 Mon Jul 11 13:30:57 2005 +++ lilypond/lily/book.cc Sun Jul 24 15:30:02 2005 @@ -93,11 +93,10 @@ Output_def *scaled_bookdef = scale_output_def (paper, scale); Object_key *key = new Lilypond_general_key (0, user_key_, 0); - SCM scm_key = key->self_scm (); - scm_gc_unprotect_object (scm_key); - + SCM scm_key = key->unprotect (); + paper_book->paper_ = scaled_bookdef; - scm_gc_unprotect_object (scaled_bookdef->self_scm ()); + scaled_bookdef->unprotect (); paper_book->header_ = header_; Index: lilypond/lily/completion-note-heads-engraver.cc diff -u lilypond/lily/completion-note-heads-engraver.cc:1.53 lilypond/lily/completion-note-heads-engraver.cc:1.54 --- lilypond/lily/completion-note-heads-engraver.cc:1.53 Sun Jul 24 01:33:35 2005 +++ lilypond/lily/completion-note-heads-engraver.cc Sun Jul 24 15:30:02 2005 @@ -291,7 +291,7 @@ for (int i = scratch_note_events_.size (); i--;) { - scm_gc_unprotect_object (scratch_note_events_[i]->self_scm ()); + scratch_note_events_[i]->unprotect (); } scratch_note_events_.clear (); Index: lilypond/lily/context-def.cc diff -u lilypond/lily/context-def.cc:1.43 lilypond/lily/context-def.cc:1.44 --- lilypond/lily/context-def.cc:1.43 Tue Jul 19 15:03:22 2005 +++ lilypond/lily/context-def.cc Sun Jul 24 15:30:02 2005 @@ -331,7 +331,7 @@ } tr->daddy_context_ = context; - scm_gc_unprotect_object (str); + tr->unprotect (); } } @@ -352,7 +352,7 @@ g->context_ = context; context->aliases_ = context_aliases_; - scm_gc_unprotect_object (g->self_scm ()); + g->unprotect (); context->accepts_list_ = get_accepted (ops); @@ -363,18 +363,14 @@ Context_def::clone_scm () const { Context_def *t = new Context_def (*this); - SCM x = t->self_scm (); - scm_gc_unprotect_object (x); - return x; + return t->unprotect (); } SCM Context_def::make_scm () { Context_def *t = new Context_def; - SCM x = t->self_scm (); - scm_gc_unprotect_object (x); - return x; + return t->unprotect (); } void Index: lilypond/lily/context.cc diff -u lilypond/lily/context.cc:1.62 lilypond/lily/context.cc:1.63 --- lilypond/lily/context.cc:1.62 Sun Jul 24 01:33:35 2005 +++ lilypond/lily/context.cc Sun Jul 24 15:30:02 2005 @@ -67,7 +67,7 @@ { t->init_ = true; - scm_gc_unprotect_object (ts); + t->unprotect (); Context_def *td = unsmob_context_def (t->definition_); /* This cannot move before add_context (), because \override @@ -101,11 +101,16 @@ definition_ = SCM_EOL; smobify_self (); - properties_scm_ = (new Scheme_hash_table)->self_scm (); - scm_gc_unprotect_object (properties_scm_); - + + Scheme_hash_table *tab = new Scheme_hash_table; + properties_scm_ = tab->unprotect (); + + /* + UGH UGH + const correctness. + */ if (key_) - scm_gc_unprotect_object (key_->self_scm ()); + ((Object_key*)key)->unprotect (); } /* TODO: this shares code with find_create_context (). */ Index: lilypond/lily/folded-repeat-iterator.cc diff -u lilypond/lily/folded-repeat-iterator.cc:1.37 lilypond/lily/folded-repeat-iterator.cc:1.38 --- lilypond/lily/folded-repeat-iterator.cc:1.37 Thu Mar 10 14:36:13 2005 +++ lilypond/lily/folded-repeat-iterator.cc Sun Jul 24 15:30:02 2005 @@ -113,7 +113,7 @@ alternative_iter_ = s; alternative_iter_->construct_children (); - scm_gc_unprotect_object (s->self_scm ()); + s->unprotect (); } } Index: lilypond/lily/global-context-scheme.cc diff -u lilypond/lily/global-context-scheme.cc:1.9 lilypond/lily/global-context-scheme.cc:1.10 --- lilypond/lily/global-context-scheme.cc:1.9 Tue May 31 15:25:26 2005 +++ lilypond/lily/global-context-scheme.cc Sun Jul 24 15:30:02 2005 @@ -86,5 +86,5 @@ if (be_verbose_global) message (_f ("elapsed time: %.2f seconds", timer.read ())); - return scm_gc_unprotect_object (trans->self_scm ()); + return trans->unprotect (); } Index: lilypond/lily/grob.cc diff -u lilypond/lily/grob.cc:1.135 lilypond/lily/grob.cc:1.136 --- lilypond/lily/grob.cc:1.135 Sat Jul 16 12:23:33 2005 +++ lilypond/lily/grob.cc Sun Jul 24 15:30:02 2005 @@ -67,7 +67,9 @@ We always get a new key object for a new grob. */ if (key_) - scm_gc_unprotect_object (key_->self_scm ()); + { + ((Object_key*)key_)->unprotect (); + } SCM meta = get_property ("meta"); if (scm_is_pair (meta)) { @@ -137,7 +139,9 @@ smobify_self (); if (key_) - scm_gc_unprotect_object (key_->self_scm ()); + { + ((Object_key*)key_)->unprotect (); + } } Grob::~Grob () Index: lilypond/lily/include/ly-smobs.icc diff -u lilypond/lily/include/ly-smobs.icc:1.38 lilypond/lily/include/ly-smobs.icc:1.39 --- lilypond/lily/include/ly-smobs.icc:1.38 Thu Mar 10 14:36:12 2005 +++ lilypond/lily/include/ly-smobs.icc Sun Jul 24 15:30:03 2005 @@ -51,7 +51,7 @@ { \ CL *s = (CL *) SCM_CELL_WORD_1 (ses); \ delete s; \ - scm_gc_unregister_collectable_memory (s, sizeof (CL), #CL " smob"); \ + /* scm_gc_unregister_collectable_memory (s, sizeof (CL), #CL " smob"); */ \ return SMOB_FREE_RETURN_VAL (CL); \ } \ \ @@ -64,20 +64,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 () \ { \ - SCM s = unprotected_smobify_self (); \ - scm_gc_protect_object (s); \ + 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_;\ } \ - \ SCM \ CL::unprotected_smobify_self () \ { \ @@ -92,7 +102,7 @@ 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; \ } Index: lilypond/lily/include/music-iterator.hh diff -u lilypond/lily/include/music-iterator.hh:1.66 lilypond/lily/include/music-iterator.hh:1.67 --- lilypond/lily/include/music-iterator.hh:1.66 Wed May 4 10:11:32 2005 +++ lilypond/lily/include/music-iterator.hh Sun Jul 24 15:30:03 2005 @@ -97,9 +97,8 @@ (), \ "") \ { \ - SCM val = (new Class)->self_scm (); \ - scm_gc_unprotect_object (val); \ - return val; \ + Class *c = (new Class);\ + return c->unprotect();\ } DECLARE_UNSMOB (Music_iterator, iterator); Index: lilypond/lily/include/smobs.hh diff -u lilypond/lily/include/smobs.hh:1.23 lilypond/lily/include/smobs.hh:1.24 --- lilypond/lily/include/smobs.hh:1.23 Thu Mar 10 14:36:12 2005 +++ lilypond/lily/include/smobs.hh Sun Jul 24 15:30:03 2005 @@ -120,7 +120,10 @@ private: \ void smobify_self (); \ SCM self_scm_; \ + SCM protection_cons_; \ public: \ + SCM unprotect();\ + void protect();\ SCM self_scm () const { return self_scm_; } \ private: @@ -132,6 +135,9 @@ } #define DECLARE_TYPE_P(CL) extern SCM CL ## _type_p_proc + +void protect_smob (SCM smob, SCM *prot_cons); +void unprotect_smob (SCM *prot_cons); #endif /* SMOBS_HH */ Index: lilypond/lily/key-engraver.cc diff -u lilypond/lily/key-engraver.cc:1.115 lilypond/lily/key-engraver.cc:1.116 --- lilypond/lily/key-engraver.cc:1.115 Sun Jul 24 01:33:35 2005 +++ lilypond/lily/key-engraver.cc Sun Jul 24 15:30:02 2005 @@ -107,6 +107,7 @@ void Key_engraver::acknowledge_clef (Grob_info info) { + (void)info; SCM c = get_property ("createKeyOnClefChange"); if (to_boolean (c)) { @@ -117,6 +118,7 @@ void Key_engraver::acknowledge_bar_line (Grob_info info) { + (void)info; if (scm_is_pair (get_property ("keySignature"))) { create_key (true); Index: lilypond/lily/lily-parser-scheme.cc diff -u lilypond/lily/lily-parser-scheme.cc:1.18 lilypond/lily/lily-parser-scheme.cc:1.19 --- lilypond/lily/lily-parser-scheme.cc:1.18 Wed Jul 13 20:30:47 2005 +++ lilypond/lily/lily-parser-scheme.cc Sun Jul 24 15:30:02 2005 @@ -118,7 +118,7 @@ parser->parse_file (init, file_name, out_file); bool error = parser->error_level_; - scm_gc_unprotect_object (parser->self_scm ()); + parser->unprotect (); parser = 0; if (error) /* TODO: pass renamed input file too. */ @@ -139,7 +139,7 @@ sources.set_path (&global_path); Lily_parser *parser = new Lily_parser (&sources); parser->parse_string (ly_scm2string (ly_code)); - scm_gc_unprotect_object (parser->self_scm ()); + parser->unprotect (); parser = 0; return SCM_UNSPECIFIED; @@ -152,7 +152,7 @@ Lily_parser *parser = unsmob_lily_parser (parser_smob); Lily_parser *clone = new Lily_parser (*parser); - return scm_gc_unprotect_object (clone->self_scm ()); + return clone->unprotect (); } LY_DEFINE (ly_parser_define, "ly:parser-define!", Index: lilypond/lily/lily-parser.cc diff -u lilypond/lily/lily-parser.cc:1.44 lilypond/lily/lily-parser.cc:1.45 --- lilypond/lily/lily-parser.cc:1.44 Mon Jul 11 12:59:29 2005 +++ lilypond/lily/lily-parser.cc Sun Jul 24 15:30:02 2005 @@ -33,7 +33,7 @@ smobify_self (); lexer_ = new Lily_lexer (sources_); - scm_gc_unprotect_object (lexer_->self_scm ()); + lexer_->unprotect (); } Lily_parser::Lily_parser (Lily_parser const &src) @@ -47,7 +47,7 @@ if (src.lexer_) lexer_ = new Lily_lexer (*src.lexer_); - scm_gc_unprotect_object (lexer_->self_scm ()); + lexer_->unprotect (); } Lily_parser::~Lily_parser () Index: lilypond/lily/music-iterator.cc diff -u lilypond/lily/music-iterator.cc:1.100 lilypond/lily/music-iterator.cc:1.101 --- lilypond/lily/music-iterator.cc:1.100 Mon Jul 11 11:51:42 2005 +++ lilypond/lily/music-iterator.cc Sun Jul 24 15:30:02 2005 @@ -91,7 +91,7 @@ p = new Simple_music_iterator; iter = p->self_scm (); - scm_gc_unprotect_object (iter); + p->unprotect (); } p->music_ = m; Index: lilypond/lily/music-scheme.cc diff -u lilypond/lily/music-scheme.cc:1.9 lilypond/lily/music-scheme.cc:1.10 --- lilypond/lily/music-scheme.cc:1.9 Wed Jul 13 18:22:34 2005 +++ lilypond/lily/music-scheme.cc Sun Jul 24 15:30:02 2005 @@ -71,9 +71,7 @@ "for creating music objects. ") { Music *ms = new Music (props); - SCM s = ms->self_scm (); - scm_gc_unprotect_object (s); - return s; + return ms->unprotect (); } /* todo: property args */ @@ -112,8 +110,8 @@ SCM copy = m; if (unsmob_music (m)) { - copy = unsmob_music (m)->clone ()->self_scm (); - scm_gc_unprotect_object (copy); + Music * mcopy = unsmob_music (m)->clone (); + copy = mcopy->unprotect (); } else if (scm_is_pair (m)) copy = scm_cons (ly_music_deep_copy (scm_car (m)), Index: lilypond/lily/music.cc diff -u lilypond/lily/music.cc:1.139 lilypond/lily/music.cc:1.140 --- lilypond/lily/music.cc:1.139 Sun Jul 24 01:33:35 2005 +++ lilypond/lily/music.cc Sun Jul 24 15:30:02 2005 @@ -320,8 +320,9 @@ SCM rv = scm_call_1 (make_music_proc, sym); /* UGH. */ - scm_gc_protect_object (rv); - return unsmob_music (rv); + Music *m = unsmob_music (rv); + m->protect (); + return m; } Index: lilypond/lily/object-key-dumper-scheme.cc diff -u lilypond/lily/object-key-dumper-scheme.cc:1.4 lilypond/lily/object-key-dumper-scheme.cc:1.5 --- lilypond/lily/object-key-dumper-scheme.cc:1.4 Thu Mar 10 14:36:13 2005 +++ lilypond/lily/object-key-dumper-scheme.cc Sun Jul 24 15:30:02 2005 @@ -16,9 +16,7 @@ "Create a key dumper. ") { Object_key_dumper *u = new Object_key_dumper (); - SCM x = u->self_scm (); - scm_gc_unprotect_object (x); - return x; + return u->unprotect (); } LY_DEFINE (ly_dumper_definitions, "ly:dumper-definitions", Index: lilypond/lily/object-key-undumper-scheme.cc diff -u lilypond/lily/object-key-undumper-scheme.cc:1.4 lilypond/lily/object-key-undumper-scheme.cc:1.5 --- lilypond/lily/object-key-undumper-scheme.cc:1.4 Thu Mar 10 14:36:13 2005 +++ lilypond/lily/object-key-undumper-scheme.cc Sun Jul 24 15:30:02 2005 @@ -26,9 +26,7 @@ "Create a key undumper. ") { Object_key_undumper *u = new Object_key_undumper (); - SCM x = u->self_scm (); - scm_gc_unprotect_object (x); - return x; + return u->unprotect (); } LY_DEFINE (ly_undumper_lookup, "ly:undumper-lookup", Index: lilypond/lily/object-key-undumper.cc diff -u lilypond/lily/object-key-undumper.cc:1.10 lilypond/lily/object-key-undumper.cc:1.11 --- lilypond/lily/object-key-undumper.cc:1.10 Wed Mar 16 19:19:15 2005 +++ lilypond/lily/object-key-undumper.cc Sun Jul 24 15:30:02 2005 @@ -72,7 +72,7 @@ Object_key *k = Object_key::undump (new_key); keys_[number] = k; - scm_gc_unprotect_object (k->self_scm ()); + k->unprotect (); } } Index: lilypond/lily/output-def-scheme.cc diff -u lilypond/lily/output-def-scheme.cc:1.6 lilypond/lily/output-def-scheme.cc:1.7 --- lilypond/lily/output-def-scheme.cc:1.6 Thu Jul 21 01:11:50 2005 +++ lilypond/lily/output-def-scheme.cc Sun Jul 24 15:30:02 2005 @@ -59,9 +59,9 @@ { Output_def *op = unsmob_output_def (def); SCM_ASSERT_TYPE (op, def, SCM_ARG1, __FUNCTION__, "Output definition"); - SCM s = op->clone ()->self_scm (); - scm_gc_unprotect_object (s); - return s; + + Output_def *clone = op->clone (); + return clone->unprotect (); } LY_DEFINE (ly_output_description, "ly:output-description", @@ -104,7 +104,7 @@ "Make a output def.") { Output_def *bp = new Output_def ; - return scm_gc_unprotect_object (bp->self_scm ()); + return bp->unprotect (); } LY_DEFINE (ly_paper_get_font, "ly:paper-get-font", 2, 0, 0, Index: lilypond/lily/paper-book.cc diff -u lilypond/lily/paper-book.cc:1.111 lilypond/lily/paper-book.cc:1.112 --- lilypond/lily/paper-book.cc:1.111 Mon Jul 11 13:30:57 2005 +++ lilypond/lily/paper-book.cc Sun Jul 24 15:30:02 2005 @@ -239,7 +239,7 @@ { Paper_system *ps = new Paper_system (title, true); systems_ = scm_cons (ps->self_scm (), systems_); - scm_gc_unprotect_object (ps->self_scm ()); + ps->unprotect (); set_system_penalty (ps, header); } } @@ -259,7 +259,7 @@ set_system_penalty (ps, header_); systems_ = scm_cons (ps->self_scm (), systems_); - scm_gc_unprotect_object (ps->self_scm ()); + ps->unprotect (); } SCM page_properties @@ -315,7 +315,7 @@ // FIXME: title=true? Paper_system *ps = new Paper_system (*unsmob_stencil (t), true); systems_ = scm_cons (ps->self_scm (), systems_); - scm_gc_unprotect_object (ps->self_scm ()); + ps->unprotect (); // FIXME: figure out penalty. //set_system_penalty (ps, scores_[i].header_); } Index: lilypond/lily/paper-def.cc diff -u lilypond/lily/paper-def.cc:1.141 lilypond/lily/paper-def.cc:1.142 --- lilypond/lily/paper-def.cc:1.141 Thu Mar 10 14:36:13 2005 +++ lilypond/lily/paper-def.cc Sun Jul 24 15:30:02 2005 @@ -60,7 +60,7 @@ SCM val = Modified_font_metric::make_scaled_font_metric (f, lookup_mag); sizes = scm_acons (scm_make_real (lookup_mag), val, sizes); - scm_gc_unprotect_object (val); + unsmob_metrics (val)->unprotect (); scm_hashq_set_x (font_table, f->self_scm (), sizes); return unsmob_metrics (val); } @@ -100,8 +100,9 @@ { SCM proc = ly_lily_module_constant ("scale-layout"); SCM new_pap = scm_call_2 (proc, o->self_scm (), scm_double2num (amount)); - scm_gc_protect_object (new_pap); - return unsmob_output_def (new_pap); + o = unsmob_output_def (new_pap); + o->protect (); + return o; } Index: lilypond/lily/paper-outputter-scheme.cc diff -u lilypond/lily/paper-outputter-scheme.cc:1.9 lilypond/lily/paper-outputter-scheme.cc:1.10 --- lilypond/lily/paper-outputter-scheme.cc:1.9 Mon Jul 11 20:41:03 2005 +++ lilypond/lily/paper-outputter-scheme.cc Sun Jul 24 15:30:02 2005 @@ -36,7 +36,7 @@ progress_indication ("\n"); Paper_outputter *po = new Paper_outputter (port, f); - scm_gc_unprotect_object (po->self_scm ()); + po->unprotect (); return po->self_scm (); } Index: lilypond/lily/paper-score.cc diff -u lilypond/lily/paper-score.cc:1.85 lilypond/lily/paper-score.cc:1.86 --- lilypond/lily/paper-score.cc:1.85 Tue May 31 15:25:26 2005 +++ lilypond/lily/paper-score.cc Sun Jul 24 15:30:02 2005 @@ -54,7 +54,7 @@ systems_ = scm_cons (system->self_scm (), systems_); system->pscore_ = this; - scm_gc_unprotect_object (system->self_scm ()); + system->unprotect (); } Array<Column_x_positions> Index: lilypond/lily/parser.yy diff -u lilypond/lily/parser.yy:1.482 lilypond/lily/parser.yy:1.483 --- lilypond/lily/parser.yy:1.482 Thu Jul 21 14:45:55 2005 +++ lilypond/lily/parser.yy Sun Jul 24 15:30:02 2005 @@ -163,7 +163,8 @@ { SCM chord_ctor = ly_lily_module_constant ("construct-chord"); SCM ch = scm_call_3 (chord_ctor, pitch, dur, modification_list); - scm_gc_protect_object (ch); + + unsmob_music (ch)->protect(); return ch; } @@ -363,7 +364,6 @@ %token HYPHEN "--" %token CHORDMODIFIERS -%token COMMANDSPANREQUEST %token LYRIC_MARKUP %token MULTI_MEASURE_REST %token SCM_T @@ -447,7 +447,7 @@ %type <music> chord_body %type <music> chord_body_element %type <music> command_element -%type <music> command_req +%type <music> command_event %type <music> context_change %type <music> direction_less_event %type <music> direction_reqd_event @@ -577,20 +577,20 @@ Book *book = $1; SCM proc = THIS->lexer_->lookup_identifier ("toplevel-book-handler"); scm_call_2 (proc, THIS->self_scm (), book->self_scm ()); - scm_gc_unprotect_object (book->self_scm ()); + book->unprotect (); } | score_block { Score *score = $1; SCM proc = THIS->lexer_->lookup_identifier ("toplevel-score-handler"); scm_call_2 (proc, THIS->self_scm (), score->self_scm ()); - scm_gc_unprotect_object (score->self_scm ()); + score->unprotect (); } | toplevel_music { Music *music = $1; SCM proc = THIS->lexer_->lookup_identifier ("toplevel-music-handler"); scm_call_2 (proc, THIS->self_scm (), music->self_scm ()); - scm_gc_unprotect_object (music->self_scm ()); + music->unprotect (); } | full_markup { SCM proc = THIS->lexer_->lookup_identifier ("toplevel-text-handler"); @@ -608,7 +608,7 @@ id = ly_symbol2scm ("$defaultlayout"); THIS->lexer_->set_identifier (id, od->self_scm ()); - scm_gc_unprotect_object (od->self_scm ()); + od->unprotect(); } ; @@ -671,22 +671,22 @@ identifier_init: score_block { $$ = $1->self_scm (); - scm_gc_unprotect_object ($$); + $1->unprotect (); } | output_def { $$ = $1->self_scm (); - scm_gc_unprotect_object ($$); + $1->unprotect (); } | context_def_spec_block { $$ = $1; } | Music { $$ = $1->self_scm (); - scm_gc_unprotect_object ($$); + $1->unprotect(); } | post_event { $$ = $1->self_scm (); - scm_gc_unprotect_object ($$); + $1->unprotect(); } | number_expression { $$ = $1; @@ -753,17 +753,17 @@ $$ = new Book; $$->set_spot (@$); $$->paper_ = dynamic_cast<Output_def*> (unsmob_output_def (THIS->lexer_->lookup_identifier ("$defaultpaper"))->clone ()); - scm_gc_unprotect_object ($$->paper_->self_scm ()); + $$->paper_->unprotect (); $$->header_ = THIS->lexer_->lookup_identifier ("$globalheader"); } | book_body paper_block { $$->paper_ = $2; - scm_gc_unprotect_object ($2->self_scm ()); + $2->unprotect (); } | book_body score_block { SCM s = $2->self_scm (); $$->add_score (s); - scm_gc_unprotect_object (s); + $2->unprotect(); } | book_body full_markup { $$->add_score ($2); @@ -789,13 +789,13 @@ score_body: Music { SCM m = $1->self_scm (); - scm_gc_unprotect_object (m); + $1->unprotect(); SCM scorify = ly_lily_module_constant ("scorify-music"); SCM score = scm_call_2 (scorify, m, THIS->self_scm ()); - // pass ownernship to C++ again. - scm_gc_protect_object (score); + // pass ownernship to C++ again. $$ = unsmob_score (score); + $$->protect (); $$->set_spot (@$); } | SCORE_IDENTIFIER { @@ -818,7 +818,7 @@ { $$->defs_.push ($2); } - scm_gc_unprotect_object ($2->self_scm ()); + $2->unprotect (); } | score_body error { $$->error_found_ = true; @@ -878,7 +878,7 @@ THIS->lexer_->push_initial_state (); } | output_def_head '{' OUTPUT_DEF_IDENTIFIER { - scm_gc_unprotect_object ($1->self_scm ()); + $1->unprotect (); Output_def *o = unsmob_output_def ($3); o->input_origin_.set_spot (@$); $$ = o; @@ -900,7 +900,7 @@ int m = scm_to_int ($2->get_property ("metronome-count")); Duration *d = unsmob_duration ($2->get_property ("tempo-unit")); set_tempo ($$, d->get_length (), m); - scm_gc_unprotect_object ($2->self_scm ()); + $2->unprotect (); } | output_def_body error { @@ -929,7 +929,7 @@ | Music_list Music { SCM s = $$; SCM c = scm_cons ($2->self_scm (), SCM_EOL); - scm_gc_unprotect_object ($2->self_scm ()); /* UGH */ + $2->unprotect (); /* UGH */ if (scm_is_pair (scm_cdr (s))) scm_set_cdr_x (scm_cdr (s), c); /* append */ @@ -946,7 +946,7 @@ m->set_property ("error-found", SCM_BOOL_T); SCM s = $$; SCM c = scm_cons (m->self_scm (), SCM_EOL); - scm_gc_unprotect_object (m->self_scm ()); /* UGH */ + m->unprotect (); /* UGH */ if (scm_is_pair (scm_cdr (s))) scm_set_cdr_x (scm_cdr (s), c); /* append */ @@ -989,12 +989,12 @@ SCM proc = ly_lily_module_constant ("make-repeated-music"); SCM mus = scm_call_1 (proc, $2); - scm_gc_protect_object (mus); // UGH. Music *r = unsmob_music (mus); + r->protect (); if (beg) { r-> set_property ("element", beg->self_scm ()); - scm_gc_unprotect_object (beg->self_scm ()); + beg->unprotect (); } r->set_property ("repeat-count", scm_int2num (max (times, 1))); @@ -1107,11 +1107,11 @@ } | MUSIC_FUNCTION_MUSIC Music { $$ = scm_list_3 ($1, make_input (@$), $2->self_scm ()); - scm_gc_unprotect_object ($2->self_scm ()); + $2->unprotect (); } | MUSIC_FUNCTION_SCM_MUSIC embedded_scm Music { $$ = scm_list_4 ($1, make_input (@$), $2, $3->self_scm ()); - scm_gc_unprotect_object ($3->self_scm ()); + $3->unprotect (); } | MUSIC_FUNCTION_SCM_SCM embedded_scm embedded_scm { $$ = scm_list_4 ($1, make_input (@$), $2, $3); @@ -1121,25 +1121,25 @@ } | MUSIC_FUNCTION_MARKUP_MUSIC full_markup Music { $$ = scm_list_4 ($1, make_input (@$), $2, $3->self_scm ()); - scm_gc_unprotect_object ($3->self_scm ()); + $3->unprotect (); } | MUSIC_FUNCTION_MARKUP_MARKUP full_markup full_markup { $$ = scm_list_4 ($1, make_input (@$), $2, $3); } | MUSIC_FUNCTION_MUSIC_MUSIC Music Music { $$ = scm_list_4 ($1, make_input (@$), $2->self_scm (), $3->self_scm ()); - scm_gc_unprotect_object ($2->self_scm ()); - scm_gc_unprotect_object ($3->self_scm ()); + $2->unprotect (); + $3->unprotect (); } | MUSIC_FUNCTION_SCM_MUSIC_MUSIC embedded_scm Music Music { $$ = scm_list_5 ($1, make_input (@$), $2, $3->self_scm (), $4->self_scm ()); - scm_gc_unprotect_object ($4->self_scm ()); - scm_gc_unprotect_object ($3->self_scm ()); + $4->unprotect (); + $3->unprotect (); } | MUSIC_FUNCTION_MARKUP_MUSIC_MUSIC full_markup Music Music { $$ = scm_list_5 ($1, make_input (@$), $2, $3->self_scm (), $4->self_scm ()); - scm_gc_unprotect_object ($3->self_scm ()); - scm_gc_unprotect_object ($4->self_scm ()); + $3->unprotect (); + $4->unprotect (); } ; @@ -1167,7 +1167,7 @@ if (unsmob_music (m)) { $$ = unsmob_music (m); - scm_gc_protect_object (m); + $$->protect (); } else { @@ -1206,7 +1206,7 @@ $$->set_spot (@$); $$->set_property ("element", mp->self_scm ()); - scm_gc_unprotect_object (mp->self_scm ()); + mp->unprotect(); $$->set_property ("numerator", scm_int2num (n)); $$->set_property ("denominator", scm_int2num (d)); $$->compress (Moment (Rational (n,d))); @@ -1221,7 +1221,7 @@ p->transpose (pitch_interval (from, to)); $$->set_property ("element", p->self_scm ()); - scm_gc_unprotect_object (p->self_scm ()); + p->unprotect(); } | mode_changing_head Grouped_music_list { if ($1 == ly_symbol2scm ("chords")) @@ -1229,7 +1229,7 @@ Music *chm = MY_MAKE_MUSIC ("UnrelativableMusic"); chm->set_property ("element", $2->self_scm ()); $$ = chm; - scm_gc_unprotect_object ($2->self_scm ()); + $2->unprotect(); } else { @@ -1244,7 +1244,7 @@ { Music *chm = MY_MAKE_MUSIC ("UnrelativableMusic"); chm->set_property ("element", $$->self_scm ()); - scm_gc_unprotect_object ($$->self_scm ()); + $$->unprotect(); $$ = chm; } THIS->lexer_->pop_state (); @@ -1321,14 +1321,14 @@ Music *m = $3; Pitch start = *unsmob_pitch ($2); $$ = make_music_relative (start, m); - scm_gc_unprotect_object (m->self_scm ()); + m->unprotect(); } | RELATIVE Composite_music { Music *m = $2; Pitch middle_c (0, 0, 0); $$ = make_music_relative (middle_c, m); - scm_gc_unprotect_object (m->self_scm ()); + m->unprotect(); } ; @@ -1377,7 +1377,7 @@ all->set_property ("elements", scm_cons (voice->self_scm (), lst)); $$ = all; - scm_gc_unprotect_object (voice->self_scm ()); + voice->unprotect (); } | LYRICSTO simple_string { THIS->lexer_->push_lyric_state (); @@ -1386,7 +1386,7 @@ Music *music = $4; SCM name = $2; $$ = make_lyric_combine_music (name, music); - scm_gc_unprotect_object (music->self_scm ()); + music->unprotect(); } ; @@ -1619,7 +1619,7 @@ /* empty */ { $$ = SCM_EOL; } | chord_body_elements chord_body_element { $$ = scm_cons ($2->self_scm (), $1); - scm_gc_unprotect_object ($2->self_scm ()); + $2->unprotect (); } ; @@ -1671,15 +1671,15 @@ SCM adder = ly_lily_module_constant ("add-quotable"); scm_call_2 (adder, $2, $3->self_scm ()); - scm_gc_unprotect_object ($3->self_scm ()); + $3->unprotect(); } ; command_element: - command_req { + command_event { $$ = MY_MAKE_MUSIC ("EventChord"); $$->set_property ("elements", scm_cons ($1->self_scm (), SCM_EOL)); - scm_gc_unprotect_object ($1->self_scm ()); + $1->unprotect(); $$-> set_spot (@$); $1-> set_spot (@$); @@ -1703,7 +1703,7 @@ $$ = MY_MAKE_MUSIC ("EventChord"); $$->set_property ("elements", scm_cons (m->self_scm (), SCM_EOL)); - scm_gc_unprotect_object (m->self_scm ()); + m->unprotect(); $$->set_spot (@$); } | E_BRACKET_CLOSE { @@ -1714,7 +1714,7 @@ $$ = MY_MAKE_MUSIC ("EventChord"); $$->set_property ("elements", scm_cons (m->self_scm (), SCM_EOL)); $$->set_spot (@$); - scm_gc_unprotect_object (m->self_scm ()); + m->unprotect (); } | E_BACKSLASH { $$ = MY_MAKE_MUSIC ("VoiceSeparator"); @@ -1762,15 +1762,15 @@ SCM proc = ly_lily_module_constant ("make-clef-set"); SCM result = scm_call_1 (proc, $2); - scm_gc_protect_object (result); $$ = unsmob_music (result); + $$->protect (); } | TIME_T fraction { SCM proc = ly_lily_module_constant ("make-time-signature-set"); SCM result = scm_apply_2 (proc, scm_car ($2), scm_cdr ($2), SCM_EOL); - scm_gc_protect_object (result); $$ = unsmob_music (result); + $$->protect (); } | MARK scalar { SCM proc = ly_lily_module_constant ("make-mark-set"); @@ -1778,10 +1778,11 @@ SCM result = scm_call_1 (proc, $2); scm_gc_protect_object (result); $$ = unsmob_music (result); + $$->protect (); } ; -command_req: +command_event: E_TILDE { $$ = MY_MAKE_MUSIC ("PesOrFlexaEvent"); } @@ -1820,12 +1821,12 @@ | post_events post_event { $2->set_spot (@2); $$ = scm_cons ($2->self_scm (), $$); - scm_gc_unprotect_object ($2->self_scm ()); + $2->unprotect (); } | post_events tagged_post_event { $2 -> set_spot (@2); $$ = scm_cons ($2->self_scm (), $$); - scm_gc_unprotect_object ($2->self_scm ()); + $2->unprotect (); } ; @@ -2181,15 +2182,14 @@ FIGURE_SPACE { Music *bfr = MY_MAKE_MUSIC ("BassFigureEvent"); $$ = bfr->self_scm (); - scm_gc_unprotect_object ($$); + bfr->unprotect (); } | bass_number { Music *bfr = MY_MAKE_MUSIC ("BassFigureEvent"); $$ = bfr->self_scm (); bfr->set_property ("figure", $1); - - scm_gc_unprotect_object ($$); + bfr->unprotect (); } | bass_figure bass_mod { Music *m = unsmob_music ($1); @@ -2269,7 +2269,7 @@ Music *v = MY_MAKE_MUSIC ("EventChord"); v->set_property ("elements", scm_list_1 (n->self_scm ())); - scm_gc_unprotect_object (n->self_scm ()); + n->unprotect (); v->set_spot (@$); n->set_spot (@$); @@ -2282,7 +2282,7 @@ Music *v = MY_MAKE_MUSIC ("EventChord"); v->set_property ("elements", scm_list_1 (n->self_scm ())); - scm_gc_unprotect_object (n->self_scm ()); + n->unprotect (); v->set_spot (@$); n->set_spot (@$); $$ = v; @@ -2313,27 +2313,27 @@ velt->set_property ("elements", scm_list_1 (ev->self_scm ())); velt->set_spot (@$); - scm_gc_unprotect_object (ev->self_scm ()); + ev->unprotect(); $$ = velt; } | MULTI_MEASURE_REST optional_notemode_duration { SCM proc = ly_lily_module_constant ("make-multi-measure-rest"); SCM mus = scm_call_2 (proc, $2, make_input (@$)); - scm_gc_protect_object (mus); $$ = unsmob_music (mus); + $$->protect (); } | lyric_element optional_notemode_duration { if (!THIS->lexer_->is_lyric_state ()) THIS->parser_error (@1, _ ("have to be in Lyric mode for lyrics")); - Music *lreq = MY_MAKE_MUSIC ("LyricEvent"); - lreq->set_property ("text", $1); - lreq->set_property ("duration",$2); - lreq->set_spot (@$); + Music *levent = MY_MAKE_MUSIC ("LyricEvent"); + levent->set_property ("text", $1); + levent->set_property ("duration",$2); + levent->set_spot (@$); Music *velt = MY_MAKE_MUSIC ("EventChord"); - velt->set_property ("elements", scm_list_1 (lreq->self_scm ())); + velt->set_property ("elements", scm_list_1 (levent->self_scm ())); $$= velt; } @@ -2604,7 +2604,7 @@ } '{' score_body '}' { Score * sc = $4; $$ = scm_list_2 (ly_lily_module_constant ("score-markup"), sc->self_scm ()); - scm_gc_unprotect_object (sc->self_scm ()); + sc->unprotect (); THIS->lexer_->pop_state (); } | MARKUP_HEAD_SCM0 embedded_scm { @@ -2771,7 +2771,7 @@ Music *csm = MY_MAKE_MUSIC ("ContextSpeccedMusic"); csm->set_property ("element", m->self_scm ()); - scm_gc_unprotect_object (m->self_scm ()); + m->unprotect (); csm->set_property ("context-type", scm_is_symbol (type) ? type : scm_string_to_symbol (type)); Index: lilypond/lily/score-engraver.cc diff -u lilypond/lily/score-engraver.cc:1.150 lilypond/lily/score-engraver.cc:1.151 --- lilypond/lily/score-engraver.cc:1.150 Sun Jul 24 01:33:35 2005 +++ lilypond/lily/score-engraver.cc Sun Jul 24 15:30:02 2005 @@ -77,7 +77,7 @@ } pscore_ = new Paper_score (dynamic_cast<Output_def *> (context ()->get_output_def ())); - scm_gc_unprotect_object (pscore_->self_scm ()); + pscore_->unprotect (); SCM props = updated_grob_properties (context (), ly_symbol2scm ("System")); Index: lilypond/lily/score-performer.cc diff -u lilypond/lily/score-performer.cc:1.64 lilypond/lily/score-performer.cc:1.65 --- lilypond/lily/score-performer.cc:1.64 Sun Jul 24 01:33:35 2005 +++ lilypond/lily/score-performer.cc Sun Jul 24 15:30:02 2005 @@ -103,7 +103,7 @@ Score_performer::initialize () { performance_ = new Performance; - scm_gc_unprotect_object (performance_->self_scm ()); + performance_->unprotect (); performance_->midi_ = context ()->get_output_def (); Translator_group::initialize (); Index: lilypond/lily/score-scheme.cc diff -u lilypond/lily/score-scheme.cc:1.12 lilypond/lily/score-scheme.cc:1.13 --- lilypond/lily/score-scheme.cc:1.12 Mon Jul 11 13:30:57 2005 +++ lilypond/lily/score-scheme.cc Sun Jul 24 15:30:02 2005 @@ -25,9 +25,7 @@ Score *score = new Score; score->set_music (music); - SCM self = score->self_scm (); - scm_gc_unprotect_object (self); - return self; + return score->unprotect (); } LY_DEFINE (ly_score_embedded_format, "ly:score-embedded-format", @@ -58,8 +56,7 @@ return SCM_BOOL_F; score_def = score_def->clone (); - SCM prot = score_def->self_scm (); - scm_gc_unprotect_object (prot); + SCM prot = score_def->unprotect (); /* TODO: SCORE_DEF should be scaled according to OD->parent_ or OD itself. */ @@ -113,7 +110,7 @@ header, basename, key->self_scm ()); } - scm_gc_unprotect_object (key->self_scm ()); + key->unprotect (); return SCM_UNSPECIFIED; } Index: lilypond/lily/score.cc diff -u lilypond/lily/score.cc:1.167 lilypond/lily/score.cc:1.168 --- lilypond/lily/score.cc:1.167 Mon Jul 11 13:30:57 2005 +++ lilypond/lily/score.cc Sun Jul 24 15:30:02 2005 @@ -74,14 +74,20 @@ smobify_self (); Music *m = unsmob_music (s.music_); - music_ = m ? m->clone ()->self_scm () : SCM_EOL; - scm_gc_unprotect_object (music_); + if (m) + { + Music *mclone = m->clone (); + music_ = mclone->unprotect (); + } + else + music_ = SCM_EOL; + for (int i = 0, n = s.defs_.size (); i < n; i++) { Output_def * copy = s.defs_[i]->clone (); defs_.push (copy); - scm_gc_unprotect_object (copy->self_scm ()); + copy->unprotect (); } header_ = ly_make_anonymous_module (false); if (ly_is_module (s.header_)) @@ -108,14 +114,14 @@ Real scale = scm_to_double (bpd->c_variable ("outputscale")); Output_def *def = scale_output_def (unsmob_output_def (outdef), scale); - scaled_def = def->self_scm (); + Output_def *bdef = scale_output_def (bpd, scale); + def->parent_ = bdef; - scaled_bookdef = scale_output_def (bpd, scale)->self_scm (); - unsmob_output_def (scaled_def)->parent_ - = unsmob_output_def (scaled_bookdef); + scaled_def = def->self_scm (); + scaled_bookdef = bdef->self_scm(); - scm_gc_unprotect_object (scaled_bookdef); - scm_gc_unprotect_object (scaled_def); + def->unprotect(); + bdef->unprotect (); } SCM context = ly_run_translator (music, scaled_def, key); @@ -137,7 +143,7 @@ paper_book->add_score (systems); paper_book->classic_output (outname); - scm_gc_unprotect_object (paper_book->self_scm ()); + paper_book->unprotect (); } scm_remember_upto_here_1 (scaled_def); @@ -170,8 +176,7 @@ int outdef_count = defs_.size (); Object_key *key = new Lilypond_general_key (book_key, user_key_, 0); - SCM scm_key = key->self_scm (); - scm_gc_unprotect_object (scm_key); + SCM scm_key = key->unprotect (); for (int i = 0; !i || i < outdef_count; i++) { @@ -182,8 +187,8 @@ { def = scale_output_def (def, scale); def->parent_ = layoutbook; - scaled = def->self_scm (); - scm_gc_unprotect_object (scaled); + + scaled = def->unprotect (); } /* TODO: fix or junk --no-layout. */ @@ -217,7 +222,8 @@ { m->origin ()->error (_ ("errors found, ignoring music expression")); - this->error_found_ = this->error_found_ || to_boolean (m->get_property ("error-found")); + this->error_found_ = this->error_found_ + || to_boolean (m->get_property ("error-found")); } if (this->error_found_) Index: lilypond/lily/system.cc diff -u lilypond/lily/system.cc:1.112 lilypond/lily/system.cc:1.113 --- lilypond/lily/system.cc:1.112 Sun Jul 24 01:33:35 2005 +++ lilypond/lily/system.cc Sun Jul 24 15:30:03 2005 @@ -83,7 +83,7 @@ { elem->pscore_ = pscore_; all_elements_->add (elem); - scm_gc_unprotect_object (elem->self_scm ()); + elem->unprotect (); } } @@ -397,7 +397,7 @@ pl->break_before_penalty_ = robust_scm2double (break_point->get_property ("page-penalty"), 0.0); - return scm_gc_unprotect_object (pl->self_scm ()); + return pl->unprotect (); } Link_array<Item> Index: lilypond/lily/translator-ctors.cc diff -u lilypond/lily/translator-ctors.cc:1.43 lilypond/lily/translator-ctors.cc:1.44 --- lilypond/lily/translator-ctors.cc:1.43 Thu Mar 10 14:36:12 2005 +++ lilypond/lily/translator-ctors.cc Sun Jul 24 15:30:03 2005 @@ -38,7 +38,7 @@ SCM k = ly_symbol2scm (classname (t)); global_translator_dict->set (k, t->self_scm ()); - scm_gc_unprotect_object (t->self_scm ()); + t->unprotect (); } Translator * Index: lilypond/lily/tweak-registration.cc diff -u lilypond/lily/tweak-registration.cc:1.11 lilypond/lily/tweak-registration.cc:1.12 --- lilypond/lily/tweak-registration.cc:1.11 Sat Apr 30 22:42:54 2005 +++ lilypond/lily/tweak-registration.cc Sun Jul 24 15:30:03 2005 @@ -18,7 +18,7 @@ undumper_ = 0; smobify_self (); undumper_ = new Object_key_undumper (); - scm_gc_unprotect_object (undumper_->self_scm ()); + undumper_->unprotect (); } Tweak_registry::~Tweak_registry () @@ -30,7 +30,7 @@ { tweaks_.clear (); undumper_ = new Object_key_undumper (); - scm_gc_unprotect_object (undumper_->self_scm ()); + undumper_->unprotect (); } void _______________________________________________ Lilypond-cvs mailing list Lilypond-cvs@gnu.org http://lists.gnu.org/mailman/listinfo/lilypond-cvs