From 4088b7570b18704917b0c721b3979e421084ef0a Mon Sep 17 00:00:00 2001 From: David Kastrup Date: Fri, 17 Apr 2015 12:55:56 +0200 Subject: [PATCH] Issue 4357/1: Move self_scm_ into non-templated Smob_core base class. --- lily/include/smobs.hh | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/lily/include/smobs.hh b/lily/include/smobs.hh index 138bf36346..62eefeb2ce 100644 --- a/lily/include/smobs.hh +++ b/lily/include/smobs.hh @@ -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 Smob : public Smob_base { +class Smob : public Smob_core, public Smob_base { private: - SCM self_scm_; SCM protection_cons_; Smob (const Smob &); // 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; -- 2.39.5