]> git.donarmstrong.com Git - lilypond.git/commitdiff
Reorganize argument list for Syntax::partial-music-function
authorDavid Kastrup <dak@gnu.org>
Tue, 14 Jul 2015 13:56:04 +0000 (15:56 +0200)
committerDavid Kastrup <dak@gnu.org>
Tue, 21 Jul 2015 05:07:13 +0000 (07:07 +0200)
lily/parser.yy
scm/ly-syntax-constructors.scm

index 9da363df933d208053348e40223a98e6ea359a6e..48ada375661dd85f2b44e46e298016c971af5905 100644 (file)
@@ -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);
        }
        ;
 
index ccf24e0abf74130519a39adaff1a65098b2eeaf5..54cea850ec9bd52b089c09e95f80110711419177 100644 (file)
 
 ;; 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
             ;; 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)))