racket/collects/scribblings/foreign/unsafe-foreign.ss

32 lines
1.2 KiB
Scheme

#lang scheme/base
(require scheme/foreign
(for-syntax scheme/base
scheme/provide-transform))
(error 'unsafe! "only `for-label' use in the documentation")
(unsafe!)
;; This is like `all-defined-out', but it ignores the 'not-provide-all-defined
;; property, so that the bindings introduced by `unsafe!' are exported.
(define-syntax all-unsafe-defined-out
(make-provide-transformer
(lambda (stx modes)
(syntax-case stx ()
[(_)
(let-values ([(ids stx-ids) (syntax-local-module-defined-identifiers)]
[(same-ctx?) (lambda (free-identifier=?)
(lambda (id)
(free-identifier=? id
(datum->syntax
stx
(syntax-e id)))))])
(map (lambda (id)
(make-export id (syntax-e id) 0 #f stx))
(filter (same-ctx? free-identifier=?)
ids)))]))))
(provide (protect-out (all-unsafe-defined-out))
(all-from-out scheme/foreign))