At Wed, 7 Nov 2012 20:00:51 +0100, Tobias Hammer wrote: > i am currently playing around with properties attached to cstructs and ran > into some problems. > > Normally, with racket structs, i can access a property without an instance > of the struct via the struct type descriptor (struct:S). There seems to be > nothing similar for cstructs, so the only way i found to check for or > access a property is to create a dummy instance solely for this purpose. > Would it be possible to add a similar type descriptor for cstructs? To > account for the incompatibility with the one for structs it might make > sense to name it different, maybe cstruct:S or similar.
I've added it as `struct:cpointer:S' --- sticking with "struct:" because it is a structure type in the usual sense, but adding "cpointer:" because it corresponds to the wrapper struct, and not really to `S' instances. > If such a descriptor would exists it should be included in the transformer > bindings for cstructs. Another info i am really missing there is the > super-type field. As far as i can see, it would be a valid semantic to set > it to the identifier if the cstruct was created by type and to set it #f > if it got its super-type by cpointer. After looking into this, I'm not sure what you had in mind after all. I fixed a related issue, which is that a cstruct subtype now inherits its parent's wrapper and properties. For example, (define-values (p p? p-ref) (make-struct-type-property 'my-p)) (define-cstruct _S ([a (_array _byte 23)]) #:property p (lambda () _S)) (define-cstruct (_T _S) ()) (p? (ptr-ref (malloc _T) _T)) produces #t. But I think that's not all that you were getting at, so maybe an example would help. > But one more thing on properties. A source of really nasty bugs is if you > try to use the ctype of a cstruct inside the property: > > (define-values (p p? p-ref) (make-struct-type-property 'my-p)) > (define-cstruct _S ([a (_array _byte 23)]) > #:property p _S) Fixed in a way that turns that into an error for a too-early use of `_S', as we discussed. _________________________ Racket Developers list: http://lists.racket-lang.org/dev