[racket] call/comp, eq? and call-with-continuation-prompt

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Mon Mar 10 22:50:12 EDT 2014

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


Posted on the users mailing list.