From 77cf1054ff5aeb20978a1586a44f5b95fb365585 Mon Sep 17 00:00:00 2001 From: David Kastrup Date: Wed, 3 Feb 2016 19:38:29 +0100 Subject: [PATCH] Issue 4798/4: Parser work for key lists including numbers This admits key lists containing non-negative numbers into various syntactic constructs previously using symbol lists. --- lily/include/lily-imports.hh | 2 ++ lily/lily-imports.cc | 2 ++ lily/parser.yy | 10 +++++----- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/lily/include/lily-imports.hh b/lily/include/lily-imports.hh index 28f6e93562..97982895f5 100644 --- a/lily/include/lily-imports.hh +++ b/lily/include/lily-imports.hh @@ -65,6 +65,8 @@ namespace Lily { extern Variable hash_table_to_alist; extern Variable interpret_markup_list; extern Variable invalidate_alterations; + extern Variable key_p; + extern Variable key_list_p; extern Variable key_signature_interface_alteration_positions; extern Variable layout_extract_page_properties; extern Variable lilypond_main; diff --git a/lily/lily-imports.cc b/lily/lily-imports.cc index a62216e084..adc9124fb7 100644 --- a/lily/lily-imports.cc +++ b/lily/lily-imports.cc @@ -59,6 +59,8 @@ namespace Lily { Variable hash_table_to_alist ("hash-table->alist"); Variable interpret_markup_list ("interpret-markup-list"); Variable invalidate_alterations ("invalidate-alterations"); + Variable key_p ("key?"); + Variable key_list_p ("key-list?"); Variable key_signature_interface_alteration_positions ("key-signature-interface::alteration-positions"); Variable layout_extract_page_properties ("layout-extract-page-properties"); Variable lilypond_main ("lilypond-main"); diff --git a/lily/parser.yy b/lily/parser.yy index 62cf8301e3..54de4727b5 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -1715,9 +1715,9 @@ symbol_list_rev: symbol_list_part: symbol_list_element { - $$ = try_string_variants (Lily::symbol_list_p, $1); + $$ = try_string_variants (Lily::key_list_p, $1); if (SCM_UNBNDP ($$)) { - parser->parser_error (@1, _("not a symbol")); + parser->parser_error (@1, _("not a key")); $$ = SCM_EOL; } else $$ = scm_reverse ($$); @@ -1728,6 +1728,7 @@ symbol_list_part: symbol_list_element: STRING | embedded_scm_bare + | UNSIGNED ; @@ -4049,8 +4050,7 @@ Lily_lexer::try_special_identifiers (SCM *destination, SCM sid) *destination = unsmob (sid)->clone ()->unprotect (); return SCM_IDENTIFIER; } else if (scm_is_pair (sid) - && scm_is_pair (scm_car (sid)) - && scm_is_symbol (scm_caar (sid))) { + && scm_is_true (Lily::key_list_p (sid))) { *destination = sid; return LOOKUP_IDENTIFIER; } @@ -4123,7 +4123,7 @@ try_string_variants (SCM pred, SCM str) if (scm_is_true (scm_call_1 (pred, str))) return str; // a symbol may be interpreted as a list of symbols if it helps - if (scm_is_symbol (str)) { + if (scm_is_true (Lily::key_p (str))) { str = scm_list_1 (str); if (scm_is_true (scm_call_1 (pred, str))) return str; -- 2.39.2