[racket] call/comp, eq? and call-with-continuation-prompt
Out of curiosity, why would removing the prompt tag change the behavior?
On Mon, Mar 10, 2014 at 10:50 PM, Matthew Flatt <mflatt at cs.utah.edu>
wrote:
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20140310/ca8c8558/attachment-0001.html>