On Thu, 06 Jun 2019 13:36:27 -0700, Paul S Person
<pspe...@ix.netcom.invalid> wrote:
<context>
>When I compiled the latest batch of Jiri's changes, I found myself
>faced with 19 additional diffs in c_readme for PS, all of them in the
>index. They are very strange: they appear to be pagination errors /in
>the index/, and a brief check with wdw showed that the first item
>misplaced by our wgml was moved because the metrics shows that it
>should be. Which, of course, means that the problem lies elsewhere.
>
>Synching with my last change (38048) reversed this, and then moving
>forward identified Jiri's change 38061, which is described as:
>
> correct some type mismatches
> use new character classification macros
>
>Synching back from 38061 to change 38060 showed only the single
>expected diff (the date and time line).
<snippo>
It occurred to me that, if I could synch to 38060 and then add each
file in turn from 38061, I could probably find out which one was
causing the problem.
And it worked. The file was gsymnar.c and the function was indeed
find_symvar_l(), as Jiri suggested, but he referenced a major change
and a problem with the code. So he changed
while( !*p && isdigit(*p) ) {
into
while( my_isdigit( *p ) ) {
and changing that into
while( !*p && my_isdigit(*p) ) {
fixed the problem. This /was/ a substantive change; too bad it wasn't
checked for regression.
Note to Jiri: so far as I can tell, the rules for /local/ symbols are:
1) the auto symbols (*, 1, 2 etc) have a scope that is limited to the
currrent macro
2) symbols created explicitly ("*fred=3" for example) have a scope
that the enire macro inclusion chain up to the first /file/; in
effect, the value of the symbol is inherited from the /last/ macro (or
the first file) that defines it unless overridden by the current macro
3) all symbols consisting entirely of numbers are treated as auto
symbols, whether they were created explicitly or not
This code supposed to be trapping all symbols consisting entirely of
numbers so that no attempt is made to find them in the local
dictionary chain.
After looking at it, I have come to the conclusion that you are
correct. Interestingly, the obvious change (changing "!*p" to "*p"
both here and the line below it in the file (which actually searches
the local dictionary chain) reduces the number of diffs to 3 (!) but
also produces 22 unfreed memory blocks and a claim that (Ox)264 chunks
are unfreed. Also, 33 pages appear to be missing. Very odd.
Still, I suppose this counts as progress of a sort. The missing pages
appear to include a GRAPHIC. I suppose I had better see what is going
on, as the problem you introduced is gone and this one could be mine,
or it could simply have been uncovered by fixing yours.