2010/12/20 Felipe Gonçalves Assis <[email protected]>: > Hi, > > In the attached snippet, the call to ly:set-default-scale has no > effect on the midi result, both in the stable and development > versions. > > I believe that this is due to Pitches being constructed before > the new default_global_scale is set (see files lily/pitch.cc and > lily/scale.cc), so that they keep a pointer to the old Scale, > created in scm/lily.scm:387. > > This looks bad, because as ly:set-default-scale is called, the > old object gets unprotected. > > In fact, by applying the change described in the attached file > diff.txt, I obtained the results I expected (set-scale-test-mine.midi), > which only confirms my suspicions. (The last c is 6 tones higher, > because an octave is hard-coded as 6 tones, but that is another > issue). > > This leads me to the following questions: > > 1. Is the current behaviour the desired one?
Yes. After setting the scale, you have to redefine the pitches for them to pick up the new scale. > 2. Is it a bug? > 3. Do we really have a problem with garbage collection? > (I observe no consequences) No. Since old pitches still have references to the old scale, it is not flushed. > By the way, there is actually an alternative solution, which would be > to make Pitch objects use default_global_scale directly, instead of > storing its value as an internal field during initialisation. This leads > me to the related question: > > 4. What is the purpose of the non-static scale_ field in the Pitch class? > > I look forward to and would very much appreciate any thoughts on > these from anybody acquainted with this code. In general, I tried to avoid creating global variables (such as scale), as a matter of habit. -- Han-Wen Nienhuys - [email protected] - http://www.xs4all.nl/~hanwen _______________________________________________ lilypond-devel mailing list [email protected] http://lists.gnu.org/mailman/listinfo/lilypond-devel
