From ec9544e67d66912801c9004f417b00e7867e10b5 Mon Sep 17 00:00:00 2001 From: David Kastrup Date: Tue, 24 May 2016 15:50:00 +0200 Subject: [PATCH] Issue 4862: Merge get_acknowledger and get_end_acknowledger --- lily/include/scheme-engraver.hh | 12 ++++-------- lily/include/translator.hh | 14 ++++---------- lily/include/translator.icc | 10 +++------- lily/scheme-engraver.cc | 10 ++++------ lily/translator-dispatch-list.cc | 5 +---- 5 files changed, 16 insertions(+), 35 deletions(-) diff --git a/lily/include/scheme-engraver.hh b/lily/include/scheme-engraver.hh index 7ec28c4c9a..59cab571fb 100644 --- a/lily/include/scheme-engraver.hh +++ b/lily/include/scheme-engraver.hh @@ -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 interface_acknowledger_hash_; // Alist of listened-symbol . scheme-function SCM per_instance_listeners_; diff --git a/lily/include/translator.hh b/lily/include/translator.hh index 6c081fa8a4..d10e8d41ec 100644 --- a/lily/include/translator.hh +++ b/lily/include/translator.hh @@ -61,15 +61,10 @@ static Drul_array 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_; diff --git a/lily/include/translator.icc b/lily/include/translator.icc index fb95382c38..1d45061578 100644 --- a/lily/include/translator.icc +++ b/lily/include/translator.icc @@ -55,14 +55,10 @@ #define DEFINE_ACKNOWLEDGERS(classname) \ Drul_array 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 */ diff --git a/lily/scheme-engraver.cc b/lily/scheme-engraver.cc index fc51d439c0..c322a6d255 100644 --- a/lily/scheme-engraver.cc +++ b/lily/scheme-engraver.cc @@ -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]); } diff --git a/lily/translator-dispatch-list.cc b/lily/translator-dispatch-list.cc index 208d8a501c..40ca1b3a5d 100644 --- a/lily/translator-dispatch-list.cc +++ b/lily/translator-dispatch-list.cc @@ -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)); -- 2.39.5