]> git.donarmstrong.com Git - lilypond.git/commitdiff
Issue 4899/1: Let method_finder also find listeners
authorDavid Kastrup <dak@gnu.org>
Sat, 18 Jun 2016 08:20:43 +0000 (10:20 +0200)
committerDavid Kastrup <dak@gnu.org>
Thu, 23 Jun 2016 08:12:24 +0000 (10:12 +0200)
This allows using inherited listeners directly like with
acknowledgers and translator methods.

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

index dd0659bf50866ec4a9e03e86565deffc0299f7dd..0adc835c09f02fa1b0bee4b8c671b1427df97e1d 100644 (file)
 #define DECLARE_TRANSLATOR_CALLBACKS(NAME)                              \
   template <void (NAME::*mf)()>                                         \
   static SCM method_finder () { return method_find_base<NAME, mf> (); } \
+  template <void (NAME::*mf)(Stream_event *)>                           \
+  static SCM method_finder ()                                           \
+  {                                                                     \
+    return Callback_wrapper::make_smob<trampoline<NAME, mf> > ();       \
+  }                                                                     \
   /* end #define */
 
 /*
index b649a1a197884aa7a86ce51d616eff51e3640675..cc2440279f3d19263934e6c03fc8f58e923c616d 100644 (file)
@@ -113,7 +113,7 @@ void add_acknowledger (SCM ptr,
 #define ADD_LISTENER(cl, m)                                             \
   listener_list_ = scm_acons                                            \
     (event_class_symbol (#m),                                           \
-     Callback_wrapper::make_smob                                        \
-     <trampoline <cl, &cl::listen_ ## m> > (), listener_list_)
+     method_finder<&cl::listen_ ## m> (),                               \
+     listener_list_)
 
 #endif /* TRANSLATOR_ICC */