On Sun, 14 Nov 1999, Brian J. Fox wrote:

>    >     if (arg == START)
>    >       {
>    > !       char *addr = get_xref_token (0);
>    >         char *name = get_xref_token (0);
> 
>    This change breaks support for macros inside @email.  Why did you need 
>    it?
> 
> I would be surprised if it actually broke support for macros inside
> @email.  Isn't execute_string() called on the arguments after they are
> gathered?

It's subtle (and thus took a lot of sweat and blood to get right).  
execute_string is indeed called on the name and address, but it doesn't 
only expand macros.  It also converts Texinfo commands embedded in the 
name and the address.  For @email, the usual case is that the address 
calls @@ (to produce a literal `@').

Now suppose @email is itself called from a macro.  In that case, @@ will 
be passed to execute_string more than once, and bad things will happen 
the second time.  Under -E, the macro-expanded output is also incorrect 
in some cases like this.

get_xref_token, when called with a non-zero argument, expands only the 
macros, but leaves all the other Texinfo commands unexpanded, and thus 
makes all this mess work.

So the question is: did you actually see that the expansion by 
get_xref_token gets in the way of the bug report in point?  If not, I'd 
ask to leave it as it is.  If it does seem to get in the way, let's try 
to find some other way of fixing it, because what you did will 
reintroduce lots of subtle bugs that took several painful iterations to 
fix.

Reply via email to