]> git.donarmstrong.com Git - lilypond.git/commitdiff
Issue 4357/1: Move self_scm_ into non-templated Smob_core base class.
authorDavid Kastrup <dak@gnu.org>
Fri, 17 Apr 2015 10:55:56 +0000 (12:55 +0200)
committerDavid Kastrup <dak@gnu.org>
Tue, 12 May 2015 12:25:00 +0000 (14:25 +0200)
lily/include/smobs.hh

index 138bf363469ded7281485af6996a98f49ca87a38..62eefeb2cec3c3825dd08da36afefcadd324941a 100644 (file)
@@ -261,14 +261,24 @@ public:
 void protect_smob (SCM smob, SCM *prot_cons);
 void unprotect_smob (SCM smob, SCM *prot_cons);
 
+// The Smob_core class is not templated and contains material not
+// depending on the Super class.
+
+class Smob_core {
+protected:
+  SCM self_scm_;
+  Smob_core () : self_scm_ (SCM_UNDEFINED) { };
+public:
+  SCM self_scm () const { return self_scm_; }
+};
+
 template <class Super>
-class Smob : public Smob_base<Super> {
+class Smob : public Smob_core, public Smob_base<Super> {
 private:
-  SCM self_scm_;
   SCM protection_cons_;
   Smob (const Smob<Super> &); // Do not define!  Not copyable!
 protected:
-  Smob () : self_scm_ (SCM_UNDEFINED), protection_cons_ (SCM_EOL) { };
+  Smob () : protection_cons_ (SCM_EOL) { };
 public:
   static size_t free_smob (SCM obj)
   {
@@ -294,7 +304,6 @@ public:
     unprotect_smob (s, &protection_cons_);
     return s;
   }
-  SCM self_scm () const { return self_scm_; }
 };
 
 extern bool parsed_objects_should_be_dead;