Walter Bright:
> Just for fun, searchfixlist goes back at least to 1983 or so.

It contains this if (I am not able to indent it well):

                        if (s->Sseg == p->Lseg &&
                (s->Sclass == SCstatic ||
#if TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS
                (!(config.flags3 & CFG3pic) && s->Sclass == SCglobal)) &&
#else
                  s->Sclass == SCglobal) &&
#endif
                  s->Sxtrnnum == 0 && p->Lflags & CFselfrel) {


How do you rewrite that in good D code? A possible way is to split that messy 
if into two nested ifs. Between first and second if you define a boolean 
variable in two different ways using a static if. And in the second if you use 
the boolean variable and the second part of the runtime test. Something like 
this:

if (part1) {
        static if (versions_test) {
                bool aux = ...
        } else {
                bool aux = ...  
        }
        
        if (aux && part2) {
                // ...
        } else {
                // ...
        }
}

aux is defined in the middle and not before the first if because performing 
this runtime test is not necessary when part1 fails.

Bye,
bearophile

Reply via email to