[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: How to patsubst the result of an include?
From: |
Gary V. Vaughan |
Subject: |
Re: How to patsubst the result of an include? |
Date: |
Mon, 07 Feb 2005 13:27:21 +0000 |
User-agent: |
Mozilla Thunderbird 0.9 (X11/20041103) |
Hi Stepan,
Stepan Kasal wrote:
> On Fri, Feb 04, 2005 at 05:53:49PM +0000, Gary V. Vaughan wrote:
>>> define(`include_orig', defn(`include'))
>>> define(`include', `indirq(`include_orig', $1)')
>
> ...
>
>>Actually, with the attached implementation, that won't work because when
>>GNU M4 puts a file on the input stack (ala include) any partial string
>>that doesn't come from the stack is lost :-( So it still doesn't solve
>>Matthew's problem.
>
>
> Do I understand correctly that
> qindir(`include', `file')
> wouldn't work?
That depends what you mean by not work. Certainly the open and close quotes
added to the input stack by m4_qindir() are dropped and ignored:
$ echo 'a, b' > foo
$ m4
qindir(`include', `foo')
a, b
define(a, z)
qindir(`include', `foo')
z, b
undivert(`foo')
a, b
But as you can see, undivert does the right thing here anyway. I almost
made m4_qindir() recognise calls to m4_include() and redirect to
m4_undivert(), but that would be a hack so I restrained myself. And in
anycase, the output of undivert is not rescanned, and doesn't help Matthew any
with sustituting the contents of a file:
patsubst(undivert(`foo'), `b', `x')
a, b
> (And perhaps would even emit a spurious right quote string?)
No the right quote is lost too.
> Please let me discuss a problem which is not too much unrelated:
>
> the following code:
> define(`x', -'-)
> define(y, defn(`x'))
> y
> expands to:
> --'
> while I believe it should expand to:
> -'-
Agreed.
> I think that there should be a special ``token type'' for treating defn
> and qindir: the token would carry a string, adn as soon as the token is
> expanded, it would immediately expand to the string.
>
> In other words, you'd place the string on the stack, but when m4 proceeds
> to do the next expansion of the string, it'd be somehow instructed to
> jump over the string (as if it would find a matching right quote there).
> Since we know the expansion will follow immediately, we could implement
> this hack via one global variable, which would tell the ``expand loop''
> that it should jump to the destination; the ``expand loop'' would clear
> the variable as soon as the message is received and the jump is done.
So that the expansion of a defn or qindir is never rescanned? I guess
that is the case already for defn. So far, so good...
> The result of this would be that
> qindir(`include', `file')
> would include the file literally, even if it contains unmatched right
> quotes.
The implementation I wrote last week does that already, so I'm not sure
what this buys? (except that it would fix your defn bug, above, of course)
$ echo "a-'-b" > foo
$ m4
define(a, z)dnl
include(`foo')dnl
z-'-b
qindir(`include', `foo')dnl
z-'-b
define(y, qindir(`include', `foo'))dnl
y
z-'-b
> What do you think?
I think that fixing the dropped quote bug in the stack handling, and running
with my existing implementation does the right thing without perturbing the
code so much...
Cheers,
Gary.
--
Gary V. Vaughan ())_. address@hidden,gnu.org}
Research Scientist ( '/ http://tkd.kicks-ass.net
GNU Hacker / )= http://www.gnu.org/software/libtool
Technical Author `(_~)_ http://sources.redhat.com/autobook
signature.asc
Description: OpenPGP digital signature
- How to patsubst the result of an include?, Matthew Braithwaite, 2005/02/02
- Re: How to patsubst the result of an include?, Stepan Kasal, 2005/02/02
- Re: How to patsubst the result of an include?, Matthew Braithwaite, 2005/02/02
- Re: How to patsubst the result of an include?, Stepan Kasal, 2005/02/03
- Re: How to patsubst the result of an include?, Gary V. Vaughan, 2005/02/04
- Re: How to patsubst the result of an include?, Stepan Kasal, 2005/02/04
- Re: How to patsubst the result of an include?, Gary V. Vaughan, 2005/02/04
- Re: How to patsubst the result of an include?, Stepan Kasal, 2005/02/07
- Re: How to patsubst the result of an include?,
Gary V. Vaughan <=
- Re: How to patsubst the result of an include?, Steven Simpson, 2005/02/04
- Re: How to patsubst the result of an include?, Stepan Kasal, 2005/02/03