Taco Hoekwater
David Kastrup wrote:
Well, looking through, I noticed something of sub-Knuthian quality:
@d push_dir(#)== begin dir_tmp:=new_dir(#); link(dir_tmp):=dir_ptr; dir_ptr:=dir_tmp; dir_ptr:=dir_tmp; end
Note the duplication of the last assignment. Not tragic, but ugly.
That could be related to the deallocation error. The node free-ing code tests whether dir_ptr is equal to null, but in fact there are often two dir_ptr-s: a global one and a local one.
With a program as simple and readable as TeX, such shortcuts make a lot of sense and add a new dimension of fun to debugging. A good thing none of the Omega developers will be at EuroTeX this year, I'd have a mind to tell them... Incidentally, I noticed that quite a few variables were renamed in LuaTeX as compared to the upstream tex.web (underscores added or removed). Again, I don't know whether eTeX, Aleph, Omega, PDFTeX or whoever else are to blame, but it increases the size of diffs, and if done globally, carries the potential to introduce problems like global/local variable shadowing.
I will get back to this later, after the more serious issues are solved. It'll take me a loong time to find out why the code does what it does, let alone where and why it does it wrongly.
Who are you telling. What a mess. -- David Kastrup