triggering GC.
* lily/*-iterator.cc: be even more careful with smobbed copy
constructors.
2002-09-19 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ * 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.
: 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());
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_)
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());
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
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_;
Percent_repeat_iterator::Percent_repeat_iterator ()
{
child_iter_ = 0;
-
}
void
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
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
{
separate_contexts_b_
= src.separate_contexts_b_;
+ children_list_ = SCM_EOL;
SCM children_list = SCM_EOL;
SCM *tail = &children_list;
;; 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
)