From 58d9b3eb19b5561f000926d969e1064d89c30149 Mon Sep 17 00:00:00 2001 From: Stephen Chang Date: Tue, 11 Oct 2016 11:39:23 -0400 Subject: [PATCH] add doc example for make-provide-pre-transformer --- .../scribblings/reference/stx-trans.scrbl | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/pkgs/racket-doc/scribblings/reference/stx-trans.scrbl b/pkgs/racket-doc/scribblings/reference/stx-trans.scrbl index cc285ae86c..19682fd6fa 100644 --- a/pkgs/racket-doc/scribblings/reference/stx-trans.scrbl +++ b/pkgs/racket-doc/scribblings/reference/stx-trans.scrbl @@ -1338,7 +1338,9 @@ pre-transformers}. The @racket[modes] argument is the same as for Creates a @tech{provide transformer} (i.e., a structure with the @racket[prop:provide-transformer] property) using the given procedure as the transformer. If a @racket[pre-proc] is provided, then the result is also a -@tech{provide pre-transformer}.} +@tech{provide pre-transformer}. +Often used in combination with @racket[expand-export] and/or +@racket[pre-expand-export].} @defproc[(make-provide-pre-transformer [pre-proc (syntax? (listof (or/c exact-integer? #f)) @@ -1346,7 +1348,33 @@ as the transformer. If a @racket[pre-proc] is provided, then the result is also provide-pre-transformer?]{ Like @racket[make-provide-transformer], but for a value that is a -@tech{provide pre-transformer}, only.} +@tech{provide pre-transformer}, only. +Often used in combination with @racket[pre-expand-export]. + +@examples[ +#:eval stx-eval +(module m racket + (require + (for-syntax racket/provide-transform syntax/parse syntax/stx)) + + (define-syntax wrapped-out + (make-provide-pre-transformer + (lambda (stx modes) + (syntax-parse stx + [(_ f ...) + #:with (wrapped-f ...) + (stx-map + syntax-local-lift-expression + #'((lambda args + (printf "applying ~a, args: ~a\n" 'f args) + (apply f args)) ...)) + (pre-expand-export + #'(rename-out [wrapped-f f] ...) modes)])))) + + (provide (wrapped-out + -))) +(require 'm) +(- 1 (+ 2 3)) +]} @defthing[prop:provide-transformer struct-type-property?]{