2004-02-11 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ * 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
(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))
;; 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