lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Master fails to compile


From: Keith OHara
Subject: Re: Master fails to compile
Date: Fri, 29 May 2015 06:13:32 -0700
User-agent: Opera Mail/12.16 (Win32)

On Thu, 28 May 2015 01:36:54 -0700, David Kastrup <address@hidden> wrote:

"Keith OHara" <address@hidden> writes:

I had an old RedHat installation with gcc updated as far as I could to
4.6.  In the next few weeks I'll find some reasonably-modern linux.

Well, using no longer supported systems with network access (and it's
pretty hard to work on current LilyPond source without network access)
is a security nightmare.  Old GNU/Linux installations are actually
pretty popular as mail hubs for malware distribution.


Updating most software, was no problem, even synchronizing to the release of 
the whole distribution.  But gcc and glibc tend to lag behind.  The latest 
Centos that works on a 32-bit i386 is CentOS 6.6 (supported through 2020) with 
gcc 4.4.7.  I'm looking into switching to Debian.

The tricky bit about the function template in Smob_base template <SCM
(Super::*pmf)(void)> static SCM smob_trampoline (SCM self) is the way
it creates functions in Smob_base that call member functions of the
derived classes like Listener.  Following what happens requires a lot
of flipping back and forth between header files.

Smob_base may not be the best place.  I remember wanting to put it in
Dispatcher itself at first and I got some private/protected thing in the
way.  But it might make more sense to pierce the encapsulation with some
sort of "friend" declaration (if unavoidable) rather than move the whole
functionality there.


If you can define the trampoline as a static member of the class whose member 
function is being called, that will be less surprising.   It might be a bit 
ugly to have the boiler-plate code in each derived class that uses the 
mechanism, but the boilerplate is recognizable if we can see it all at once.
   LY_DECLARE_SMOB_APPLY_INIT(smob_apply_trampoline, 1, 0, 0)
   static SCM smob_apply_trampoline(SCM self, SCM arg) {
     return unsmob(self)->listen(arg);
   }
   SCM listen(SCM ev) {
    ...}




reply via email to

[Prev in Thread] Current Thread [Next in Thread]