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);
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_;
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 (); \
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_;
#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 */
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;
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
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]);
}
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));