[iterate-devel] twice previous bug
Hoehle, Joerg-Cyril
Joerg-Cyril.Hoehle at t-systems.com
Thu Jun 21 16:35:05 UTC 2007
Kilian Sprotte wrote:
>although I might become an iterate developer one day,
I don't know whether this comment relates to your proposal to find the
"twice previous bug".
Maybe you shouldn't start with the hardest bug. There are 2 other
issues:
- make Iterate for num accept the exact same keywords as Loop
e.g. Loop for downfrom to (presumably easiest)
- prefix clause bug
e.g. cannot define both clauses (foo x) and (foo x bar y).
(needs correct implementation of a trie)
I took another look at the "twice previous bug" the other day (despite
having -09 time). My current suspicion is that the code breaks some
invariant. The previous-code-info keeps a ref and LAST to remember the
for-clause's body. When PREVIOUS is seen, that body is surrounded with
(setq #:previous-var xyz) and (setq previous-var zyx) with destructive
modifications of list structure. But doing so, the ref and LAST
pointers must be updated as well, for a second PREVIOUS splice to work.
Maybe that's the invariant that gets violated?
(iter
(repeat 3)
(for (values a b) = (floor 5 2))
(for p-a previous a)
(for p-b previous b)
(collect (list a b p-a p-b)))
Regards,
Jorg Hohle.
More information about the iterate-devel
mailing list