From: David Kastrup Date: Tue, 14 Jul 2015 13:56:04 +0000 (+0200) Subject: Reorganize argument list for Syntax::partial-music-function X-Git-Tag: release/2.19.24-1~5^2~27 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=6ec61abd275a527807dd64bd216e1c5e6b8b74f3;p=lilypond.git Reorganize argument list for Syntax::partial-music-function --- diff --git a/lily/parser.yy b/lily/parser.yy index 9da363df93..48ada37566 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -699,8 +699,7 @@ identifier_init_nonumber: | partial_function ETC { $$ = MAKE_SYNTAX (partial_music_function, @$, - scm_reverse_x (scm_car ($1), SCM_EOL), - scm_reverse_x (scm_cdr ($1), SCM_EOL)); + scm_reverse_x ($1, SCM_EOL)); } ; @@ -708,45 +707,39 @@ identifier_init_nonumber: partial_function: MUSIC_FUNCTION function_arglist_partial { - $$ = scm_cons (scm_list_1 ($1), scm_list_1 ($2)); + $$ = scm_acons ($1, $2, SCM_EOL); } | EVENT_FUNCTION function_arglist_partial { - $$ = scm_cons (scm_list_1 ($1), scm_list_1 ($2)); + $$ = scm_acons ($1, $2, SCM_EOL); } | SCM_FUNCTION function_arglist_partial { - $$ = scm_cons (scm_list_1 ($1), scm_list_1 ($2)); + $$ = scm_acons ($1, $2, SCM_EOL); } | MUSIC_FUNCTION EXPECT_SCM function_arglist_optional partial_function { - $$ = scm_cons (scm_cons ($1, scm_car ($4)), - scm_cons ($3, scm_cdr ($4))); + $$ = scm_acons ($1, $3, $4); } | EVENT_FUNCTION EXPECT_SCM function_arglist_optional partial_function { - $$ = scm_cons (scm_cons ($1, scm_car ($4)), - scm_cons ($3, scm_cdr ($4))); + $$ = scm_acons ($1, $3, $4); } | SCM_FUNCTION EXPECT_SCM function_arglist_optional partial_function { - $$ = scm_cons (scm_cons ($1, scm_car ($4)), - scm_cons ($3, scm_cdr ($4))); + $$ = scm_acons ($1, $3, $4); } | MUSIC_FUNCTION EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup partial_function { - $$ = scm_cons (scm_cons ($1, scm_car ($5)), - scm_cons ($4, scm_cdr ($5))); + $$ = scm_acons ($1, $4, $5); } | EVENT_FUNCTION EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup partial_function { - $$ = scm_cons (scm_cons ($1, scm_car ($5)), - scm_cons ($4, scm_cdr ($5))); + $$ = scm_acons ($1, $4, $5); } | SCM_FUNCTION EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup partial_function { - $$ = scm_cons (scm_cons ($1, scm_car ($5)), - scm_cons ($4, scm_cdr ($5))); + $$ = scm_acons ($1, $4, $5); } ; diff --git a/scm/ly-syntax-constructors.scm b/scm/ly-syntax-constructors.scm index ccf24e0abf..54cea850ec 100644 --- a/scm/ly-syntax-constructors.scm +++ b/scm/ly-syntax-constructors.scm @@ -63,22 +63,23 @@ ;; Used for chaining several music functions together. `final' ;; contains the last argument and still needs typechecking. -(define (music-function-chain fun args final) - (let* ((siglast (last (ly:music-function-signature fun))) +(define (music-function-chain call final) + (let* ((fun (car call)) + (siglast (last (ly:music-function-signature fun))) (pred? (if (pair? siglast) (car siglast) siglast))) (if (pred? final) - (music-function fun (cons final args)) + (music-function fun (cons final (cdr call))) (begin - (argument-error (1+ (length args)) pred? final) + (argument-error (length call) pred? final) ;; call music function just for the error return value (music-function fun #f))))) -(define-public (partial-music-function fun-list arg-list) - (let* ((good (every list? arg-list)) - (sig (ly:music-function-signature (car fun-list)))) +(define-public (partial-music-function call-list) + (let* ((good (every list? call-list)) + (sig (ly:music-function-signature (caar call-list)))) (and good (ly:make-music-function - (cons (car sig) (list-tail (cdr sig) (length (car arg-list)))) + (cons (car sig) (list-tail sig (length (car call-list)))) (lambda rest ;; Every time we use music-function, it destructively ;; reverses its list of arguments. Changing the calling @@ -89,11 +90,11 @@ ;; avoid reusing any music expressions without copying and ;; want to let them point to the location of the music ;; function call rather than its definition. - (let ((arg-list (ly:music-deep-copy arg-list (*location*)))) + (let ((call-list (ly:music-deep-copy call-list (*location*)))) (fold music-function-chain - (music-function (car fun-list) - (reverse! rest (car arg-list))) - (cdr fun-list) (cdr arg-list)))))))) + (music-function (caar call-list) + (reverse! rest (cdar call-list))) + (cdr call-list)))))))) (define-public (void-music) (ly:set-origin! (make-music 'Music)))