At Mon, 4 Mar 2013 18:06:10 +0100, "Sam Vervaeck" wrote: > Just one more question: when implementing malloc-immobile-cell and > free-immobile-cell, how do you check if a pointer has not yet been set? Doing > things like: > > (if (cpBody-data body1) > "I have some data" > "I have nothing") > > Always shows "I have nothing".
I expected that the `data' field would have an immutable-cell value --- which might contain #f but not be #f itself --- so I expected "I have some data" always. You should use `ptr-ref' and `pre-set!' to get or change the value in an immobile cell. Here's an example transcript: > (define-cstruct _cpBody ([data _racket])) > (define b (make-cpBody (malloc-immobile-cell #f))) > (cpBody-data b) #<cpointer> > (ptr-ref (cpBody-data b) _racket) #f > (ptr-set! (cpBody-data b) _racket 'something) > (collect-garbage) > (ptr-ref (cpBody-data b) _racket) 'something ____________________ Racket Users list: http://lists.racket-lang.org/users

