From bdd3c80b32f39751ed30a89a4623ede6fe0c6df3 Mon Sep 17 00:00:00 2001 From: Erik Sandberg Date: Mon, 2 Oct 2006 06:02:46 +0000 Subject: [PATCH] * lily/lexer.ll, lily/parser.yy: Add EXPECT_NO_MORE_ARGS token, to avoid parser lookahead for 0-ary functions. * lily/translator.cc: Extract event classes from IMPLEMENT_TRANSLATOR_LISTENER for documentation generation. --- ChangeLog | 8 ++++++++ lily/include/translator.hh | 1 + lily/include/translator.icc | 2 +- lily/lexer.ll | 1 + lily/parser.yy | 8 ++++++-- lily/translator.cc | 16 +++++++++++++++- scm/define-music-types.scm | 8 ++++---- 7 files changed, 36 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 56a2473bcd..c25ca8cd03 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2006-10-02 Erik Sandberg + + * lily/lexer.ll, lily/parser.yy: Add EXPECT_NO_MORE_ARGS token, to + avoid parser lookahead for 0-ary functions. + + * lily/translator.cc: Extract event classes from + IMPLEMENT_TRANSLATOR_LISTENER for documentation generation. + 2006-10-02 Heikki Junes * po/fi.po: Fix spaces, commas etc. in Finnish translation using diff --git a/lily/include/translator.hh b/lily/include/translator.hh index eea779085a..14ff0b31a1 100644 --- a/lily/include/translator.hh +++ b/lily/include/translator.hh @@ -131,6 +131,7 @@ protected: // should be private. void protect_event (SCM ev); virtual void derived_mark () const; static void add_translator_listener (translator_listener_record **listener_list, translator_listener_record *r, Listener (*get_listener) (void *), const char *ev_class); + SCM get_listened_class_list (const translator_listener_record *listeners) const; friend class Translator_group; }; diff --git a/lily/include/translator.icc b/lily/include/translator.icc index 904e3c127c..fa2e2842bb 100644 --- a/lily/include/translator.icc +++ b/lily/include/translator.icc @@ -60,7 +60,7 @@ scm_makfrom0str (desc), static_properties); \ \ static_properties = scm_acons (ly_symbol2scm ("events-accepted"), \ - parse_symbol_list (accepted), static_properties); \ + get_listened_class_list (listener_list_), static_properties); \ \ static_properties = scm_acons (ly_symbol2scm ("properties-read"), \ parse_symbol_list (read), static_properties); \ diff --git a/lily/lexer.ll b/lily/lexer.ll index 9d333ff511..04a279b4ca 100644 --- a/lily/lexer.ll +++ b/lily/lexer.ll @@ -753,6 +753,7 @@ Lily_lexer::scan_escaped_word (string str) yylval.scm = get_music_function_transform (sid); SCM s = scm_object_property (yylval.scm, ly_symbol2scm ("music-function-signature")); + push_extra_token (EXPECT_NO_MORE_ARGS); for (; scm_is_pair (s); s = scm_cdr (s)) { if (scm_car (s) == ly_music_p_proc) diff --git a/lily/parser.yy b/lily/parser.yy index 63f38ae6b1..6299ad3eb9 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -260,6 +260,8 @@ If we give names, Bison complains. %token EXPECT_MARKUP; %token EXPECT_MUSIC; %token EXPECT_SCM; +/* After the last argument. */ +%token EXPECT_NO_MORE_ARGS; %token BOOK_IDENTIFIER %token CHORDMODIFIER_PITCH @@ -936,7 +938,7 @@ function_arglist_nonmusic_last: } ; -function_arglist_nonmusic: /*empty*/ { +function_arglist_nonmusic: EXPECT_NO_MORE_ARGS { $$ = SCM_EOL; } | EXPECT_MARKUP function_arglist_nonmusic full_markup { @@ -947,7 +949,9 @@ function_arglist_nonmusic: /*empty*/ { } ; -function_arglist: /*empty*/ { +function_arglist: EXPECT_NO_MORE_ARGS { + /* This is for 0-ary functions, so they don't need to + read a lookahead token */ $$ = SCM_EOL; } | function_arglist_music_last diff --git a/lily/translator.cc b/lily/translator.cc index c9c8d874fb..d90c8be045 100644 --- a/lily/translator.cc +++ b/lily/translator.cc @@ -150,7 +150,6 @@ void add_listened_event_class (SCM sym) { ensure_listened_hash (); - scm_hashq_set_x (listened_event_class_table, sym, SCM_BOOL_T); } @@ -177,12 +176,27 @@ Translator::add_translator_listener (translator_listener_record **listener_list, SCM class_sym = scm_str2symbol (name.c_str ()); add_listened_event_class (class_sym); + r->event_class_ = class_sym; r->get_listener_ = get_listener; r->next_ = *listener_list; *listener_list = r; } +/* + Used by ADD_THIS_TRANSLATOR to extract a list of event-class names + for each translator. This list is used by the internals + documentation. +*/ +SCM +Translator::get_listened_class_list (const translator_listener_record *listeners) const +{ + SCM list = SCM_EOL; + for (; listeners; listeners = listeners->next_) + list = scm_cons (listeners->event_class_, list); + return list; +} + /* SMOBS */ diff --git a/scm/define-music-types.scm b/scm/define-music-types.scm index b3855c34db..375a1568c0 100644 --- a/scm/define-music-types.scm +++ b/scm/define-music-types.scm @@ -149,13 +149,13 @@ Syntax: @var{note}\\cr ... @var{note}\\rc (you can also use \\<, \\!, \\cresc, and \\endcresc. See the user manual for details.).") - (types . (general-music dynamic-event crescendo-event event)) + (types . (general-music span-event span-dynamic-event crescendo-event event)) )) (DecrescendoEvent . ( (description . "See @ref{CrescendoEvent}.") - (types . (general-music dynamic-event decrescendo-event event)) + (types . (general-music span-event span-dynamic-event decrescendo-event event)) )) (ExtenderEvent @@ -605,13 +605,13 @@ Syntax: @code{s}@var{duration}") (SostenutoEvent . ( (description . "Depress or release sostenuto pedal. ") - (types . (general-music event pedal-event sostenuto-pedal-event)) + (types . (general-music event pedal-event sostenuto-event)) )) (UnaCordaEvent . ( (description . "Depress or release una-corda pedal.") - (types . (general-music event pedal-event una-corda-pedal-event)) + (types . (general-music event pedal-event una-corda-event)) )) (StringNumberEvent -- 2.39.2