I think this is a compiler bug, where the compiler is changing (let ([a (cons 1 2)]) (call-with-composable-continuation (λ (k) (set! g k)) p) a)
to (begin (call-with-composable-continuation (λ (k) (set! g k)) p) (cons 1 2)) so you get a new pair each time the continuation is called. I will need to fix the compiler so that it doesn't move allocation past an expression that could capture a continuation. At Mon, 10 Mar 2014 21:44:19 -0400, Spencer Florence wrote: > For some reason the below program returns false: > > #lang racket > (define g #f) > (define p (make-continuation-prompt-tag)) > (define (t) > (let ([a (cons 1 2)]) > (call-with-composable-continuation (λ (k) (set! g k)) p) > a)) > (call-with-continuation-prompt t p) > (eq? (call-with-continuation-prompt g p) > (call-with-continuation-prompt g p)) > > This happens with call/cc as well. From my understanding a should be > allocated before the continuation is captured, so the two calls to g should > return the same cell. If I remove the prompt tag the program returns true. > > Anyone have any clue whats going on or how to fix? > > --Spencer > ____________________ > Racket Users list: > http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users