
Extend `define-cstruct' to support #:property specs, which causes the constructor and C->Racket coercsions to wrap the pointer in a structure instance with the specified properties. Of course, the wrapper structure has a `prop:cpointer' property so that the wrapper can be used transparently as a C pointer. Add missing tests and documentation for the id`->list', `list->'id, id`->list*', and `list*->'id bindings created by `define-cstruct'.
43 lines
1.2 KiB
Racket
43 lines
1.2 KiB
Racket
#lang racket/base
|
|
|
|
(require scribble/manual
|
|
scribble/struct
|
|
scribble/decode
|
|
(only-in "../inside/utils.rkt" cpp)
|
|
(for-syntax racket/base)
|
|
scribble/racket
|
|
(for-label racket/base
|
|
racket/contract
|
|
(except-in ffi/unsafe ->)
|
|
ffi/unsafe/cvector
|
|
ffi/vector
|
|
(only-in ffi/unsafe [-> ->>])))
|
|
|
|
(provide cpp
|
|
InsideRacket InsideRacket-doc
|
|
guide.scrbl
|
|
reference.scrbl
|
|
->>
|
|
(all-from-out scribble/manual)
|
|
(for-label (all-from-out racket/base
|
|
racket/contract
|
|
ffi/unsafe
|
|
ffi/unsafe/cvector
|
|
ffi/vector)))
|
|
|
|
(define InsideRacket-doc '(lib "scribblings/inside/inside.scrbl"))
|
|
|
|
(define InsideRacket
|
|
(other-manual InsideRacket-doc))
|
|
|
|
(define guide.scrbl
|
|
'(lib "scribblings/guide/guide.scrbl"))
|
|
|
|
(define reference.scrbl
|
|
'(lib "scribblings/reference/reference.scrbl"))
|
|
|
|
(define-syntax ->>
|
|
(make-element-id-transformer
|
|
(lambda (stx)
|
|
#'(racketlink ->> #:style "plainlink" (racketkeywordfont "->")))))
|