On Thursday 04 January 2007 20:13, Han-Wen Nienhuys wrote: > Erik Sandberg escreveu: > > They are there for completeness. I think the reason they are never > > called, is that score contexts aren't explicitly destroyed. I think this > > is because contexts below Score are destroyed during iteration, while > > scores themselves aren't (probably because they contain references to the > > typeset score, which is needed later). Scores and score-translators are > > therefore only removed by the GC, so the destructors are never executed. > > No, that's incorrect. Removal of contexts is different reclaiming the > memory. Can you have a look at > > Global_context::run_iterator_on_me > > why the check_removal doesn't trigger for the Score context?
Sorry for being unclear. check_removal always returns false for Score contexts, it has been that way since I joined the project. There is a reason for this: The typeset score is stored in the Score_engraver, which in turn is accessed through the Global_context returned by ly:run-translator. So the score-translator must be connected to the score-context after run-translator finishes. I plan to change this: we should junk run-translator, and instead keep track of both context and translator in the SCM code, and access the typeset score directly via the created global-translator. Then it would be possible to disconnect score-translators at iteration time. This is however not high on my todo. -- Erik _______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org http://lists.gnu.org/mailman/listinfo/lilypond-devel