The whole code in the find-non-empty loop, apart from this error, is
garbage. Here is a bit more code and analysis:
(define-public (add-quotable name mus)
(let* ((tab (eval 'musicQuotes (current-module)))
(voicename (get-next-unique-voice-name))
;; recording-group-emulate returns an assoc list (reversed!),
so
;; hand it a proper unique context name and extract that key:
(ctx-spec (context-spec-music mus 'Voice voicename))
(listener (ly:parser-lookup 'partCombineListener))
(context-list (reverse (recording-group-emulate ctx-spec
listener)))
(raw-voice (assoc voicename context-list))
(quote-contents (if (pair? raw-voice) (cdr raw-voice) '())))
;; If the context-specced quoted music does not contain anything,
try to
;; use the first child, i.e. the next in context-list after
voicename
;; That's the case e.g. for \addQuote "x" \relative c \new Voice
{...}
(if (null? quote-contents)
(let find-non-empty ((current-tail (member raw-voice
context-list)))
;; if voice has contents, use them, otherwise check next ctx
(cond ((null? current-tail) #f)
((and (pair? (car current-tail))
(pair? (cdar current-tail)))
(set! quote-contents (cdar current-tail)))
(else (find-non-empty (cdr current-tail))))))
(if (not (null? quote-contents))
(hash-set! tab name (list->vector (reverse! quote-contents
'())))
(ly:music-warning mus (ly:format (_ "quoted music `~a' is
empty") name)))))
So raw-voice is an assoc into context-list. This assoc is then
searched
for in the find-non-empty loop. For each found instance, a test is
made. If that test is not successful, the search is repeated for more
instances. However, since all found instances are _guaranteed_ to be
the same (since assoc is only called once, and then member searches for
the same key/value pair rather than just the same key), the test is
guaranteed to deliver the same result for each found instance.
This is just crap. Presumably the idea was to search for the same key
but potentially different values?