]> git.donarmstrong.com Git - lilypond.git/commitdiff
Issue 4997/2: Use Preinit class in Scheme_engraver
authorDavid Kastrup <dak@gnu.org>
Sat, 4 Jun 2016 12:11:31 +0000 (14:11 +0200)
committerDavid Kastrup <dak@gnu.org>
Fri, 18 Nov 2016 20:49:58 +0000 (21:49 +0100)
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
lily/scheme-engraver.cc

index 59cab571fbe4058a9f6b8b33dc663c5d464438ba..2eb2f30379d9b339833a65608b1b351f4311c250 100644 (file)
 
 #include "engraver.hh"
 
-class Scheme_engraver : public Engraver
+class Scheme_engraver : public Preinit<Scheme_engraver>, public Engraver
 {
-  void init_from_scheme (SCM definition);
 public:
   TRANSLATOR_FAMILY_DECLARATIONS (Scheme_engraver);
+  void pre_init ();
   Scheme_engraver (SCM definition);
 
 protected:
index c322a6d25515239cea12fd1545a596145612f113..54d96208229152c03ce29fc3616dd4f4fe109eea 100644 (file)
@@ -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);