Changes to notes
Old closure code removed.
Unified stack frame (previously, the IP stack and the recursion stack were separate)
Closure work - compilation work should be done, but untested. Now
need to create the closure blocks and be able to reference them.
Problems with local variables, as demonstrated by
:foo |n,m:| ?m (?n +)@;
1 2 foo
Normal closures appear to work - but nested closure fails with a SEGV.
There are lots of debugging messages, and a couple of new debugging methods:
Angort::dumpFrame() and CycleDetector::dump()
Nested closure appears to work, but promotion of some locals to closures doesn't.
GC of closure cycles not working, possibly because closure iterators
aren't quite right.
Getting there, but there are deletion problems when we
come to remove dead closures in a cycle. Closures get deleted
early, then we get a freetwice.
All tests pass (except for the cpptests, which have a known problem)
But still *many* debugging lines.
Debug statements removed, tests pass.
Version bump.
Some debugging code - crude traceback, and functions now shown in disassembly.
There is still a nasty bug in closures, in evidence in the pelman game. A
local stored into a closure is later retrieved as None.
Bug fix: local promotion problem; existing references to a local whose indices
was decremented due to a lower-numbered local being promoted to a closure were
not also decremented.