]> git.donarmstrong.com Git - lilypond.git/commitdiff
Issue 4862: Merge get_acknowledger and get_end_acknowledger
authorDavid Kastrup <dak@gnu.org>
Tue, 24 May 2016 13:50:00 +0000 (15:50 +0200)
committerDavid Kastrup <dak@gnu.org>
Mon, 6 Jun 2016 08:03:08 +0000 (10:03 +0200)
lily/include/scheme-engraver.hh
lily/include/translator.hh
lily/include/translator.icc
lily/scheme-engraver.cc
lily/translator-dispatch-list.cc

index 7ec28c4c9a6972249c703e4e3a23ad8ebf1c8b9a..59cab571fbe4058a9f6b8b33dc663c5d464438ba 100644 (file)
@@ -41,13 +41,10 @@ protected:
   virtual bool must_be_last () const;
 
 private:
-  virtual SCM get_acknowledger (SCM sym)
+  virtual SCM get_acknowledger (SCM sym, Direction start_end)
   {
-    return generic_get_acknowledger (sym, interface_acknowledger_hash_);
-  }
-  virtual SCM get_end_acknowledger (SCM sym)
-  {
-    return generic_get_acknowledger (sym, interface_end_acknowledger_hash_);
+    return generic_get_acknowledger
+      (sym, interface_acknowledger_hash_[start_end]);
   }
 
   SCM init_acknowledgers (SCM alist);
@@ -62,8 +59,7 @@ private:
   SCM precomputable_methods_ [TRANSLATOR_METHOD_PRECOMPUTE_COUNT];
 
   // hashq table of interface-symbol -> scheme-function
-  SCM interface_acknowledger_hash_;
-  SCM interface_end_acknowledger_hash_;
+  Drul_array<SCM> interface_acknowledger_hash_;
 
   // Alist of listened-symbol . scheme-function
   SCM per_instance_listeners_;
index 6c081fa8a4f50232f1e4b803ea118a6d6a72b0c0..d10e8d41ecbfd13a533c6d59332f571a556d8e4f 100644 (file)
   static Drul_array<Protected_scm> acknowledge_static_array_drul_;      \
   static SCM static_description_;                                       \
   static Protected_scm listener_list_;                                  \
-  static SCM static_get_acknowledger (SCM sym);                         \
-  static SCM static_get_end_acknowledger(SCM);                          \
-  virtual SCM get_acknowledger (SCM sym)                                \
+  static SCM static_get_acknowledger (SCM sym, Direction start_end);    \
+  virtual SCM get_acknowledger (SCM sym, Direction start_end)           \
   {                                                                     \
-    return static_get_acknowledger (sym);                               \
-  }                                                                     \
-  virtual SCM get_end_acknowledger (SCM sym)                            \
-  {                                                                     \
-    return static_get_end_acknowledger (sym);                           \
+    return static_get_acknowledger (sym, start_end);                    \
   }                                                                     \
 public:                                                                 \
   NAME ();                                                              \
@@ -145,8 +140,7 @@ public:
   virtual void fetch_precomputable_methods (SCM methods[]) = 0;
   virtual SCM get_listener_list () const = 0;
   virtual SCM translator_description () const = 0;
-  virtual SCM get_acknowledger (SCM sym) = 0;
-  virtual SCM get_end_acknowledger (SCM sym) = 0;
+  virtual SCM get_acknowledger (SCM sym, Direction start_end) = 0;
 
 protected:                      // should be private.
   Context *daddy_context_;
index fb95382c385d9c2e9f616ee5472a8bdfde9f2b4a..1d45061578ecc8338834c00eaf142ed36566c5d2 100644 (file)
 #define DEFINE_ACKNOWLEDGERS(classname) \
   Drul_array<Protected_scm> classname::acknowledge_static_array_drul_;  \
   SCM                                                                   \
-  classname::static_get_acknowledger (SCM sym)                          \
+  classname::static_get_acknowledger (SCM sym, Direction start_end)     \
   {                                                                     \
-    return generic_get_acknowledger (sym, acknowledge_static_array_drul_[START]);      \
-  }                                                                     \
-  SCM                                                                   \
-  classname::static_get_end_acknowledger (SCM sym)                      \
-  {                                                                     \
-    return generic_get_acknowledger (sym, acknowledge_static_array_drul_[STOP]);       \
+    return generic_get_acknowledger                                     \
+      (sym, acknowledge_static_array_drul_[start_end]);                 \
   }                                                                     \
   /* end define */
 
index fc51d439c0e90eed08dbaf4b89c06d1c2f04ca16..c322a6d25515239cea12fd1545a596145612f113 100644 (file)
@@ -32,8 +32,7 @@ Scheme_engraver::Scheme_engraver (SCM definition)
   initialize_function_ = SCM_EOL;
   finalize_function_ = SCM_EOL;
 
-  interface_acknowledger_hash_ = SCM_EOL;
-  interface_end_acknowledger_hash_ = SCM_EOL;
+  interface_acknowledger_hash_.set (SCM_EOL, SCM_EOL);
 
   must_be_last_ = false;
   per_instance_listeners_ = SCM_EOL;
@@ -111,8 +110,7 @@ Scheme_engraver::init_from_scheme (SCM definition)
                                       definition, SCM_EOL));
 
   per_instance_listeners_ = listeners;
-  interface_acknowledger_hash_ = hash1;
-  interface_end_acknowledger_hash_ = hash2;
+  interface_acknowledger_hash_.set (hash1, hash2);
 
   // It's not defined whether Scheme_engraver::derived_mark is already
   // active while the construction is underway, so we make sure we
@@ -172,6 +170,6 @@ Scheme_engraver::derived_mark () const
   scm_gc_mark (initialize_function_);
   scm_gc_mark (finalize_function_);
   scm_gc_mark (per_instance_listeners_);
-  scm_gc_mark (interface_acknowledger_hash_);
-  scm_gc_mark (interface_end_acknowledger_hash_);
+  scm_gc_mark (interface_acknowledger_hash_[START]);
+  scm_gc_mark (interface_acknowledger_hash_[STOP]);
 }
index 208d8a501c661ed7e7196b06c28b8475421bf461..40ca1b3a5d7261f5e0b344531491acda93a47899 100644 (file)
@@ -54,10 +54,7 @@ Engraver_dispatch_list::create (SCM trans_list,
 
       for (SCM i = iface_list; scm_is_pair (i); i = scm_cdr (i))
         {
-          SCM ptr
-            = (start_end == START)
-            ? eng->get_acknowledger (scm_car (i))
-            : eng->get_end_acknowledger (scm_car (i));
+          SCM ptr = eng->get_acknowledger (scm_car (i), start_end);
 
           if (!SCM_UNBNDP (ptr))
             list->dispatch_entries_.push_back (Method_instance (ptr, eng));