From 65b1bf088ecd0a749917a36cd89314159aa9e6cb Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Thu, 19 Sep 2002 11:47:30 +0000 Subject: [PATCH] (Simultaneous_music_iterator): init children_list_ before triggering GC. * lily/*-iterator.cc: be even more careful with smobbed copy constructors. --- ChangeLog | 7 +++++++ lily/chord-tremolo-iterator.cc | 1 + lily/folded-repeat-iterator.cc | 10 ++++++++-- lily/lyric-combine-music-iterator.cc | 9 +++++++-- lily/music-wrapper-iterator.cc | 8 ++++++-- lily/part-combine-music-iterator.cc | 9 +++++++-- lily/percent-repeat-iterator.cc | 14 ++++++++------ lily/sequential-iterator.cc | 9 ++++++--- lily/simultaneous-music-iterator.cc | 1 + scm/music-functions.scm | 2 +- 10 files changed, 52 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 139f596469..eb3259ae6c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2002-09-19 Han-Wen Nienhuys + * lily/simultaneous-music-iterator.cc + (Simultaneous_music_iterator): init children_list_ before + triggering GC. + + * lily/*-iterator.cc: be even more careful with smobbed copy + constructors. + * lily/break-align-engraver.cc (acknowledge_grob): also typeset LeftEdge item. diff --git a/lily/chord-tremolo-iterator.cc b/lily/chord-tremolo-iterator.cc index b4d7696968..ff44b03b33 100644 --- a/lily/chord-tremolo-iterator.cc +++ b/lily/chord-tremolo-iterator.cc @@ -35,6 +35,7 @@ Chord_tremolo_iterator::Chord_tremolo_iterator (Chord_tremolo_iterator const &sr : Music_iterator (src) { factor_ = src.factor_; + child_iter_ = src.child_iter_ ? src.child_iter_->clone () : 0; if (child_iter_) scm_gc_unprotect_object (child_iter_->self_scm()); diff --git a/lily/folded-repeat-iterator.cc b/lily/folded-repeat-iterator.cc index b2e07aed32..4c72fcf1b1 100644 --- a/lily/folded-repeat-iterator.cc +++ b/lily/folded-repeat-iterator.cc @@ -40,9 +40,15 @@ Folded_repeat_iterator::do_quit() Folded_repeat_iterator::Folded_repeat_iterator (Folded_repeat_iterator const &src) : Music_iterator (src) { - main_iter_ = src.main_iter_ ? src.main_iter_->clone () : 0; - alternative_iter_ = src.alternative_iter_ ? src.alternative_iter_->clone () : 0; + main_iter_ = 0; + alternative_iter_ = 0; main_length_mom_ = src.main_length_mom_; + + if (src.alternative_iter_) + alternative_iter_ = src.alternative_iter_->clone (); + if (src.main_iter_) + main_iter_ = src.main_iter_->clone (); + if (main_iter_) scm_gc_unprotect_object (main_iter_->self_scm()); if (alternative_iter_) diff --git a/lily/lyric-combine-music-iterator.cc b/lily/lyric-combine-music-iterator.cc index 127945b3d6..e1c72a5e9d 100644 --- a/lily/lyric-combine-music-iterator.cc +++ b/lily/lyric-combine-music-iterator.cc @@ -136,8 +136,13 @@ Lyric_combine_music_iterator::do_quit () Lyric_combine_music_iterator::Lyric_combine_music_iterator (Lyric_combine_music_iterator const & src) : Music_iterator (src) { - lyric_iter_ = src.lyric_iter_ ? src.lyric_iter_->clone () : 0; - music_iter_ = src.music_iter_ ? src.music_iter_->clone () : 0; + lyric_iter_ = 0; + music_iter_ = 0; + + if (src.lyric_iter_) + lyric_iter_ = src.lyric_iter_->clone (); + if (src.music_iter_) + music_iter_ = src.music_iter_->clone (); if (lyric_iter_) scm_gc_unprotect_object (lyric_iter_->self_scm()); diff --git a/lily/music-wrapper-iterator.cc b/lily/music-wrapper-iterator.cc index 7798d65eaf..345ff87ab7 100644 --- a/lily/music-wrapper-iterator.cc +++ b/lily/music-wrapper-iterator.cc @@ -18,9 +18,13 @@ Music_wrapper_iterator::Music_wrapper_iterator () Music_wrapper_iterator::Music_wrapper_iterator (Music_wrapper_iterator const &src) : Music_iterator (src) { - child_iter_ = (src.child_iter_) ? src.child_iter_->clone () : 0; - if (child_iter_) + + child_iter_ = 0; + if (src.child_iter_) + { + child_iter_ = src.child_iter_->clone () ; scm_gc_unprotect_object (child_iter_->self_scm()); + } } void diff --git a/lily/part-combine-music-iterator.cc b/lily/part-combine-music-iterator.cc index 11a0a75bff..276e2f4271 100644 --- a/lily/part-combine-music-iterator.cc +++ b/lily/part-combine-music-iterator.cc @@ -45,8 +45,13 @@ Part_combine_music_iterator::do_quit () Part_combine_music_iterator::Part_combine_music_iterator (Part_combine_music_iterator const &src) : Music_iterator (src) { - first_iter_ = src.first_iter_ ? src.first_iter_->clone () : 0; - second_iter_ = src.second_iter_ ? src.second_iter_->clone () : 0; + first_iter_ = 0; + second_iter_ = 0; + + if(src.first_iter_) + first_iter_ = src.first_iter_->clone (); + if (src.second_iter_) + second_iter_ = src.second_iter_->clone (); first_until_ = src.first_until_; second_until_ = src.second_until_; diff --git a/lily/percent-repeat-iterator.cc b/lily/percent-repeat-iterator.cc index cc9c112ad8..d09e6c8f3b 100644 --- a/lily/percent-repeat-iterator.cc +++ b/lily/percent-repeat-iterator.cc @@ -17,7 +17,6 @@ IMPLEMENT_CTOR_CALLBACK (Percent_repeat_iterator); Percent_repeat_iterator::Percent_repeat_iterator () { child_iter_ = 0; - } void @@ -29,11 +28,14 @@ Percent_repeat_iterator::do_quit() Percent_repeat_iterator::Percent_repeat_iterator (Percent_repeat_iterator const & p) : Music_iterator (p) { - child_iter_ = p.child_iter_ ? p.child_iter_->clone (): 0; - finish_mom_ = p.finish_mom_ ; - - if(child_iter_) - scm_gc_unprotect_object (child_iter_->self_scm()); + child_iter_ = 0; + finish_mom_ = p.finish_mom_ ; + + if (p.child_iter_) + { + child_iter_ = p.child_iter_->clone (); + scm_gc_unprotect_object (child_iter_->self_scm()); + } } bool diff --git a/lily/sequential-iterator.cc b/lily/sequential-iterator.cc index 6817d3a0d5..798283abaa 100644 --- a/lily/sequential-iterator.cc +++ b/lily/sequential-iterator.cc @@ -66,10 +66,13 @@ Sequential_iterator::Sequential_iterator (Sequential_iterator const &src) cursor_ = src.cursor_; list_ = src.cursor_; here_mom_ = src.here_mom_; - iter_ = (src.iter_) ? src.iter_->clone () : 0; + iter_ = 0; - if (iter_) - scm_gc_unprotect_object (iter_->self_scm()); + if (src.iter_) + { + iter_ = src.iter_->clone (); + scm_gc_unprotect_object (iter_->self_scm()); + } } void diff --git a/lily/simultaneous-music-iterator.cc b/lily/simultaneous-music-iterator.cc index 957b7bb628..bdeb2a7f43 100644 --- a/lily/simultaneous-music-iterator.cc +++ b/lily/simultaneous-music-iterator.cc @@ -24,6 +24,7 @@ Simultaneous_music_iterator::Simultaneous_music_iterator (Simultaneous_music_ite { separate_contexts_b_ = src.separate_contexts_b_; + children_list_ = SCM_EOL; SCM children_list = SCM_EOL; SCM *tail = &children_list; diff --git a/scm/music-functions.scm b/scm/music-functions.scm index dda65d8541..19492d57e0 100644 --- a/scm/music-functions.scm +++ b/scm/music-functions.scm @@ -329,7 +329,7 @@ this is not an override ;; switch it on here, so parsing and init isn't checked (too slow!) (define (switch-on-debugging m) - (set-debug-cell-accesses! 15000) + (set-debug-cell-accesses! 4000) m ) -- 2.39.5