On Mon 13 Mar 2017 18:09, Arne Babenhauserheide <arne_...@web.de> writes:
> Arne Babenhauserheide writes: > >> Andy Wingo <wi...@pobox.com> writes: >> >>> On Thu 09 Mar 2017 15:31, Arne Babenhauserheide <arne_...@web.de> writes: >>> >>>> However I did not manage to reproduce it in a small example, therefore I >>>> pastebinned the whole file: >>>> >>>> script: https://paste.pound-python.org/show/0IlalBrxVH7KHjW83ayu/ >>>> input: https://paste.pound-python.org/show/ZxQsazFfwVrvz9f4SU4f/ >>> >>> Sounds like you found a nice bug. This is a big script though; have you >>> tried incrementally removing parts of it to winnow it down? That is >>> definitely the first step to fixing the bug :) >> >> I tried building a minimal working example, but not removing stuff bit >> by bit (due to time constraints on free creative time). I would hope >> that it shouldn’t be too complex, but cannot promise I’d get it done >> within the next few weeks. > > Here’s a shortened version: Or even smaller: (define (t) (let ((n #t)) (let lp () (when n (call-with-prompt 'foo (lambda () (set! n #f) (abort-to-prompt 'foo)) (lambda (k) (lp))))))) Guile is thinking that the n is always true because it doesn't understand that aborting back to the prompt means that possible all mutable objects are mutated. Andy