]> git.donarmstrong.com Git - lilypond.git/commitdiff
Issue 4899/2: Revert "Issue 4885/3: Remove ack_finder/ack_find_base"
authorDavid Kastrup <dak@gnu.org>
Fri, 17 Jun 2016 14:13:55 +0000 (16:13 +0200)
committerDavid Kastrup <dak@gnu.org>
Thu, 23 Jun 2016 08:12:24 +0000 (10:12 +0200)
This reverts commit b9040afd1dcfbee6b45bc3d54850ff50d51c8ee9.

lily/include/engraver.hh
lily/include/translator.hh
lily/include/translator.icc

index 928f6a969dbddad717c25856351b53b9fba4f5d5..d0f6e8979ced98b1688462f03409d6936be10185 100644 (file)
@@ -58,6 +58,9 @@ public:
     (t->*callback) (Grob_info (e, g));
     return SCM_UNSPECIFIED;
   }
+  template <class T, void (T::*callback)(Grob_info)>
+  static SCM ack_find_base ()
+  { return Callback2_wrapper::make_smob<ack_trampoline<T, callback> > (); }
 
   /**
      Announce element. Default: pass on to daddy. Utility
index 0adc835c09f02fa1b0bee4b8c671b1427df97e1d..5197305ea280057977b37a79567998e0a6dc48c3 100644 (file)
@@ -38,7 +38,8 @@
   /* end #define */
 
 #define TRANSLATOR_INHERIT(BASE)                                        \
-  using BASE::method_finder
+  using BASE::method_finder;                                            \
+  using BASE::ack_finder;
 
 #define DECLARE_TRANSLATOR_CALLBACKS(NAME)                              \
   template <void (NAME::*mf)()>                                         \
@@ -48,6 +49,8 @@
   {                                                                     \
     return Callback_wrapper::make_smob<trampoline<NAME, mf> > ();       \
   }                                                                     \
+  template <void (NAME::*callback)(Grob_info)>                          \
+  static SCM ack_finder () { return ack_find_base<NAME, callback> (); } \
   /* end #define */
 
 /*
@@ -161,6 +164,15 @@ protected:                      // should be private.
   static SCM
   method_finder () { return SCM_UNDEFINED; }
 
+  // Overriden in Engraver.
+  template <class T, void (T::*callback)(Grob_info)>
+  static SCM
+  ack_find_base () { return SCM_UNDEFINED; }
+
+  template <void (Translator::*)(Grob_info)>
+  static SCM
+  ack_finder () { return SCM_UNDEFINED; }
+
   virtual void derived_mark () const;
   static SCM event_class_symbol (const char *ev_class);
   SCM static_translator_description (const char *grobs,
index cc2440279f3d19263934e6c03fc8f58e923c616d..3d038b68e6b275206f0b25b40b5e8e1c2343fdb5 100644 (file)
@@ -97,15 +97,14 @@ void add_acknowledger (SCM ptr,
                        SCM &ack_hash);
 
 #define ADD_ACKNOWLEDGER(CLASS, NAME)                                   \
-  add_acknowledger (Callback2_wrapper::make_smob                        \
-                    <ack_trampoline<CLASS, &CLASS::acknowledge_ ## NAME> > (), \
+  add_acknowledger (ack_finder<&CLASS::acknowledge_ ## NAME> (),        \
                     #NAME, acknowledge_static_array_drul_[START])
 
 #define ADD_END_ACKNOWLEDGER(CLASS, NAME)                               \
-  add_acknowledger (Callback2_wrapper::make_smob                        \
-                    <ack_trampoline<CLASS, &CLASS::acknowledge_end_ ## NAME> > (), \
+  add_acknowledger (ack_finder<&CLASS::acknowledge_end_ ## NAME> (),    \
                     #NAME, acknowledge_static_array_drul_[STOP])
 
+
 /*
   Implement the method cl::listen_##m, and make it listen to stream
   events of class m.