32 lines
1.2 KiB
Scheme
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))
|
|
|