From 2a66e23f356503ef916d51efa3f00cae5958dc48 Mon Sep 17 00:00:00 2001 From: David Kastrup Date: Wed, 23 Mar 2016 00:05:16 +0100 Subject: [PATCH] Issue 4811/1: Allow property paths as scalars and in assignments They cannot be embedded LilyPond since #{ 2 . 2 #} already is valid music. Property paths must have at least two syntactic elements to be recognized as such and must not start with a Scheme expression. Technically, 3 . #'() counts. This affects overrides and sets as well. --- lily/parser.yy | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/lily/parser.yy b/lily/parser.yy index 7a11d05fc9..b8849e8f4a 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -674,6 +674,14 @@ assignment: identifier_init: identifier_init_nonumber | number_expression + | symbol_list_part_bare '.' property_path + { + $$ = scm_reverse_x ($1, $3); + } + | symbol_list_part_bare ',' property_path + { + $$ = scm_reverse_x ($1, $3); + } | post_event_nofinger post_events { $$ = scm_reverse_x ($2, SCM_EOL); @@ -1726,6 +1734,21 @@ symbol_list_element: | UNSIGNED ; +symbol_list_part_bare: + STRING + { + $$ = try_string_variants (Lily::key_list_p, $1); + if (SCM_UNBNDP ($$)) { + parser->parser_error (@1, _("not a key")); + $$ = SCM_EOL; + } else + $$ = scm_reverse ($$); + } + | UNSIGNED + { + $$ = scm_list_1 ($1); + } + ; function_arglist_nonbackup: function_arglist_common @@ -2883,6 +2906,14 @@ scalar: $$ = scm_difference ($2, SCM_UNDEFINED); } | string + | symbol_list_part_bare '.' property_path + { + $$ = scm_reverse_x ($1, $3); + } + | symbol_list_part_bare ',' property_path + { + $$ = scm_reverse_x ($1, $3); + } ; event_chord: -- 2.39.2