From 6f5133448f7f6daf27191f12b411c70942751b50 Mon Sep 17 00:00:00 2001 From: David Kastrup Date: Sat, 4 Jun 2016 14:11:31 +0200 Subject: [PATCH] Issue 4997/2: Use Preinit class in Scheme_engraver This avoids calls of derived_mark on uninitialized data. Fold Scheme_engraver::init_from_scheme (SCM) into converting constructor since it has become identical to it. --- lily/include/scheme-engraver.hh | 4 ++-- lily/scheme-engraver.cc | 8 +++----- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/lily/include/scheme-engraver.hh b/lily/include/scheme-engraver.hh index 59cab571fb..2eb2f30379 100644 --- a/lily/include/scheme-engraver.hh +++ b/lily/include/scheme-engraver.hh @@ -24,11 +24,11 @@ #include "engraver.hh" -class Scheme_engraver : public Engraver +class Scheme_engraver : public Preinit, public Engraver { - void init_from_scheme (SCM definition); public: TRANSLATOR_FAMILY_DECLARATIONS (Scheme_engraver); + void pre_init (); Scheme_engraver (SCM definition); protected: diff --git a/lily/scheme-engraver.cc b/lily/scheme-engraver.cc index c322a6d255..54d9620822 100644 --- a/lily/scheme-engraver.cc +++ b/lily/scheme-engraver.cc @@ -27,7 +27,8 @@ #include "scm-hash.hh" -Scheme_engraver::Scheme_engraver (SCM definition) +void +Scheme_engraver::pre_init () { initialize_function_ = SCM_EOL; finalize_function_ = SCM_EOL; @@ -38,8 +39,6 @@ Scheme_engraver::Scheme_engraver (SCM definition) per_instance_listeners_ = SCM_EOL; for (int i = 0; i < TRANSLATOR_METHOD_PRECOMPUTE_COUNT; i++) precomputable_methods_[i] = SCM_UNDEFINED; - - init_from_scheme (definition); } Scheme_engraver::~Scheme_engraver () @@ -67,8 +66,7 @@ Scheme_engraver::fetch_precomputable_methods (SCM ptrs[]) ptrs[i] = precomputable_methods_[i]; } -void -Scheme_engraver::init_from_scheme (SCM definition) +Scheme_engraver::Scheme_engraver (SCM definition) { precomputable_methods_[START_TRANSLATION_TIMESTEP] = callable (ly_symbol2scm ("start-translation-timestep"), definition); -- 2.39.2