+
+
+int
+music_function_type (SCM func)
+{
+ SCM type = scm_object_property (func, ly_symbol2scm ("music-function-signature-keyword"));
+ if (type == ly_symbol2scm ("scm"))
+ {
+ return MUSIC_FUNCTION_SCM;
+ }
+ else if (type == ly_symbol2scm ("music"))
+ {
+ return MUSIC_FUNCTION_MUSIC;
+ }
+ else if (type == ly_symbol2scm ("scm-music"))
+ {
+ return MUSIC_FUNCTION_SCM_MUSIC;
+ }
+ else if (type == ly_symbol2scm ("scm-scm"))
+ {
+ return MUSIC_FUNCTION_SCM_SCM;
+ }
+ else if (type == ly_symbol2scm ("music-music"))
+ {
+ return MUSIC_FUNCTION_MUSIC_MUSIC;
+ }
+ else if (type == ly_symbol2scm ("scm-music-music"))
+ {
+ return MUSIC_FUNCTION_SCM_MUSIC_MUSIC;
+ }
+ else if (type == ly_symbol2scm ("scm-scm-music"))
+ {
+ return MUSIC_FUNCTION_SCM_SCM_MUSIC;
+ }
+ else if (type == ly_symbol2scm ("markup"))
+ {
+ return MUSIC_FUNCTION_MARKUP;
+ }
+ else if (type == ly_symbol2scm ("markup-music"))
+ {
+ return MUSIC_FUNCTION_MARKUP_MUSIC;
+ }
+ else if (type == ly_symbol2scm ("markup-markup"))
+ {
+ return MUSIC_FUNCTION_MARKUP_MARKUP;
+ }
+ else if (type == ly_symbol2scm ("markup-music-music"))
+ {
+ return MUSIC_FUNCTION_MARKUP_MUSIC_MUSIC;
+ }
+ else if (type == ly_symbol2scm ("markup-markup-music"))
+ {
+ return MUSIC_FUNCTION_MARKUP_MARKUP_MUSIC;
+ }
+ else if (type == ly_symbol2scm ("noarg"))
+ {
+ return MUSIC_FUNCTION;
+ }
+ else
+ {
+ /* TODO: print location */
+ error (_ ("can't find signature for music function"));
+ }
+
+ return MUSIC_FUNCTION_SCM;
+}