X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmusic-function-scheme.cc;h=e9e9a68ec6f696859e3c66e3e3fe2dd778cc50e2;hb=771503749e5fa4a4e579f0c81731b142b4c2b4f6;hp=8470a97005e4d57db4c57203ee108459b217bc26;hpb=14141519116528444054b33419d910903f902ee7;p=lilypond.git diff --git a/lily/music-function-scheme.cc b/lily/music-function-scheme.cc index 8470a97005..e9e9a68ec6 100644 --- a/lily/music-function-scheme.cc +++ b/lily/music-function-scheme.cc @@ -13,7 +13,16 @@ LY_DEFINE (ly_music_function_extract, "ly:music-function-extract", 1, 0, 0, { LY_ASSERT_TYPE (is_music_function, x, 1); - return SCM_CELL_OBJECT_1 (x); + return get_music_function_transform (x); +} + +LY_DEFINE (ly_music_function_signature, "ly:music-function-signature", 1, 0, 0, + (SCM x), + "Return the function signature inside@tie{}@var{x}.") +{ + LY_ASSERT_TYPE (is_music_function, x, 1); + + return get_music_function_signature (x); } LY_DEFINE (ly_make_music_function, "ly:make-music-function", 2, 0, 0, @@ -24,7 +33,20 @@ LY_DEFINE (ly_make_music_function, "ly:make-music-function", 2, 0, 0, " containing either @code{ly:music?} predicates or other type" " predicates. Its car is the syntax function to call.") { - LY_ASSERT_TYPE (ly_is_procedure, func, 1); + LY_ASSERT_TYPE (ly_is_list, signature, 1); + LY_ASSERT_TYPE (ly_is_procedure, func, 2); + int n = 0; + for (SCM p = signature; scm_is_pair (p); p = scm_cdr (p), ++n) + { + SCM proc = scm_car (p); + if (scm_is_pair (proc)) + proc = scm_car (proc); + if (scm_is_false (scm_procedure_p (proc))) + { + scm_wrong_type_arg_msg ("music-function", n, p, + "music function predicate"); + } + } + return make_music_function (signature, func); } -