avoid parser lookahead for 0-ary functions.
* lily/translator.cc: Extract event classes from
IMPLEMENT_TRANSLATOR_LISTENER for documentation generation.
+2006-10-02 Erik Sandberg <mandolaerik@gmail.com>
+
+ * 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 <hjunes@gmail.com>
* po/fi.po: Fix spaces, commas etc. in Finnish translation using
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;
};
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); \
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)
%token <i> EXPECT_MARKUP;
%token <i> EXPECT_MUSIC;
%token <i> EXPECT_SCM;
+/* After the last argument. */
+%token <i> EXPECT_NO_MORE_ARGS;
%token <scm> BOOK_IDENTIFIER
%token <scm> CHORDMODIFIER_PITCH
}
;
-function_arglist_nonmusic: /*empty*/ {
+function_arglist_nonmusic: EXPECT_NO_MORE_ARGS {
$$ = SCM_EOL;
}
| EXPECT_MARKUP function_arglist_nonmusic full_markup {
}
;
-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
add_listened_event_class (SCM sym)
{
ensure_listened_hash ();
-
scm_hashq_set_x (listened_event_class_table, sym, SCM_BOOL_T);
}
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
*/
... @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
(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