From: Han-Wen Nienhuys Date: Wed, 11 Feb 2004 10:53:15 +0000 (+0000) Subject: * scm/part-combiner.scm (make-autochange-music): use X-Git-Tag: release/2.1.23~39 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=1618583ab07b2ee620493c469c309977782f1bed;p=lilypond.git * scm/part-combiner.scm (make-autochange-music): use accumulator. Fixes stack overflow. --- diff --git a/ChangeLog b/ChangeLog index c04e4e79e3..7f41d31b11 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,6 +6,10 @@ 2004-02-11 Han-Wen Nienhuys + * scm/part-combiner.scm (make-autochange-music): use + accumulator. Fixes stack overflow. + + * lily/*: rename brew_molecule -> print , molecule-callback -> print-function * lily/*: rename brew_molecule -> print , molecule-callback -> print-function diff --git a/scm/part-combiner.scm b/scm/part-combiner.scm index 8996fa2739..24ff8b9d77 100644 --- a/scm/part-combiner.scm +++ b/scm/part-combiner.scm @@ -549,9 +549,9 @@ Only set if not set previously. (define-public (make-autochange-music music) - (define (generate-split-list event-list) + (define (generate-split-list event-list acc) (if (null? event-list) - '() + acc (let* ((evs (map car (cdar event-list))) (now (caar event-list)) @@ -564,22 +564,29 @@ Only set if not set previously. ;; tail recursive. (if (and pitch (not (= (ly:pitch-steps pitch) 0))) - (cons (cons now (sign (ly:pitch-steps pitch))) - (generate-split-list (cdr event-list))) - (generate-split-list (cdr event-list))) - ))) + (generate-split-list + (cdr event-list) + (cons (cons now (sign (ly:pitch-steps pitch))) acc)) + (generate-split-list (cdr event-list) acc) + )) + )) (set! noticed '()) (let* ((m (make-music-by-name 'AutoChangeMusic)) (context (ly:run-translator music part-combine-listener)) - (evs (last-pair noticed)) ) + (evs (last-pair noticed)) + (split + (reverse! + (generate-split-list (if (pair? evs) + (reverse! (cdar evs) '()) '()) + '()) + '()) + )) (ly:set-mus-property! m 'element music) - (ly:set-mus-property! - m 'split-list - (generate-split-list (if (pair? evs) (reverse! (cdar evs) '()) '())) ) + (ly:set-mus-property! m 'split-list split) (set! noticed '()) m