#include "engraver.hh"
-class Scheme_engraver : public Engraver
+struct Preinit_Scheme_engraver {
+ SCM initialize_function_;
+ SCM finalize_function_;
+ SCM precomputable_methods_ [TRANSLATOR_METHOD_PRECOMPUTE_COUNT];
+
+ // hashq table of interface-symbol -> scheme-function
+ Drul_array<SCM> interface_acknowledger_hash_;
+
+ // Alist of listened-symbol . scheme-function
+ SCM per_instance_listeners_;
+ Preinit_Scheme_engraver ();
+};
+
+class Scheme_engraver : Preinit_Scheme_engraver, public Engraver
{
- void init_from_scheme (SCM definition);
public:
TRANSLATOR_FAMILY_DECLARATIONS (Scheme_engraver);
- Scheme_engraver (SCM definition);
+ Scheme_engraver (SCM definition, Context *c);
protected:
~Scheme_engraver ();
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]);
}
- void init_acknowledgers (SCM alist, SCM *hash);
- // For now no description. In future, something derived from the
- // definition might make sense.
- SCM translator_description () const { return SCM_EOL; }
+ SCM init_acknowledgers (SCM alist);
bool must_be_last_;
-
- SCM initialize_function_;
- SCM finalize_function_;
- SCM precomputable_methods_ [TRANSLATOR_METHOD_PRECOMPUTE_COUNT];
-
- // hashq table of interface-symbol -> scheme-function
- SCM interface_acknowledger_hash_;
- SCM interface_end_acknowledger_hash_;
-
- // Alist of listened-symbol . scheme-function
- SCM per_instance_listeners_;
};
#endif /* SCHEME_ENGRAVER_HH */