]> git.donarmstrong.com Git - lilypond.git/commitdiff
* lily/lexer.ll, lily/parser.yy: Add EXPECT_NO_MORE_ARGS token, to
authorErik Sandberg <mandolaerik@gmail.com>
Mon, 2 Oct 2006 06:02:46 +0000 (06:02 +0000)
committerErik Sandberg <mandolaerik@gmail.com>
Mon, 2 Oct 2006 06:02:46 +0000 (06:02 +0000)
avoid parser lookahead for 0-ary functions.

* lily/translator.cc: Extract event classes from
IMPLEMENT_TRANSLATOR_LISTENER for documentation generation.

ChangeLog
lily/include/translator.hh
lily/include/translator.icc
lily/lexer.ll
lily/parser.yy
lily/translator.cc
scm/define-music-types.scm

index 56a2473bcda954802aa344b4405c188429807aa3..c25ca8cd037e36281b710f0fbca0242328b45b9d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+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
index eea779085aa82b23676da28f52088e21a83d9765..14ff0b31a1b394fa8ae4239207d8898fa46b42f2 100644 (file)
@@ -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;
 };
index 904e3c127c60bcef5c85cda95dd8d7421bd2009c..fa2e2842bb4d62a94169bb3011d648bbe5cb8317 100644 (file)
@@ -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); \
index 9d333ff511fe68dbf31fc68441ce47b2d28610d8..04a279b4ca06bed273cbbfdad4608b66329c1ac0 100644 (file)
@@ -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)
index 63f38ae6b173119e5d46ea8380d9e1911734fc99..6299ad3eb9e7b0d8b42e175d28edb9e0754ded87 100644 (file)
@@ -260,6 +260,8 @@ If we give names, Bison complains.
 %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
@@ -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
index c9c8d874fb309721ce291938935872b839648a40..d90c8be045b4b3526ab778e5d54862037171469e 100644 (file)
@@ -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
 */
index b3855c34dbf0eb679a655547c0d4b6cab45f396c..375a1568c043a8b10abcc3e46c137824d4709c63 100644 (file)
@@ -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