Hi Hans,
Thanks. I think the additions of (r<>null) are no-op thus can be removed. (It does no harm, though.)
if there is a loop over a list you want to quit when you run out of items ...
Of course I know but still I think the additions of (r<>null) are no-op. Reasons:
else if (type(p) = kern_node) and (subtype(p) = auto_kern) and (save_tail <> null) then
Here save_tail is already known to be non-null, so ...
begin r := save_tail;
Here r is non-null.
while (link(r) <> null) and (link(r) <> p) do
Inside this loop link(r) is non-null, so ...
r := link(r);
Here again r is non-null.
I wonder if there is still some possibility of uninitialized save_tail (which is 0, not null).
null is actually 0 in tex
But from my observation of the Robert's MWE, save_tail was 0 but not equal to null. That's why it accidentally fell through. Hironobu