[Top][All Lists]

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

Re: removing compile directive

From: grischka
Subject: Re: removing compile directive
Date: Thu, 24 Apr 2008 18:51:34 +0200

From: "Paul Smith":

> > > On Mon, 2008-04-21 at 10:43 -0700, Brian Dessent wrote:
> > > > CFLAGS = $(filter-out -D_REMOVE_THIS_,$(CFLAGS))

> The example above is quite simple, but consider more complicated
> situations where the expansion is quite complex, referencing lots of
> variables (not just one), each of which has a number of historical
> values.  The same variable could even be referenced by more than one of
> these values.  So, while expanding a variable you have to remember how
> far down the value stack you've gone and that has to be remembered
> individually for each variable and potentially for each INSTANCE of each
> variable.

> Maybe I'm making it more confusing than it needs to be, but I don't
> think so.

Well, details may still be tricky of course, but the basic logic 
could be quite easy.

Assume there is a function that expands variable from its name,
so this function would just pop a value from it's history, 
expand it, and then put it back again. Basically like this:

        var = find(NAME)
        val = pop(var->history)
        result = expand(val)
        push(val, var->history)
        return result

Such any recursive reference always sees only the earlier value, and 
each variable handles its stack individually. Behaviour wrt. other 
variables is unmolested, they still have the usual "pan scope" in 
place (or whatever you name it). For example:

    V = A
    W = B
    V = $V $W $V
    W = $W C $W

expand V --> A B C B A

--- grischka

reply via email to

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