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.