From a1c5285cc2f62c56b339fd57a06bb6e3bed2a8ef Mon Sep 17 00:00:00 2001 From: Vincent St-Amour Date: Fri, 31 Jul 2015 16:21:22 -0500 Subject: [PATCH] Move docs for syntax/transformer from unstable-doc. --- .../scribblings/transformer-helpers.scrbl | 1 + .../syntax/scribblings/transformer.scrbl | 39 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 pkgs/racket-doc/syntax/scribblings/transformer.scrbl diff --git a/pkgs/racket-doc/syntax/scribblings/transformer-helpers.scrbl b/pkgs/racket-doc/syntax/scribblings/transformer-helpers.scrbl index 53eef36523..4da2d4d75b 100644 --- a/pkgs/racket-doc/syntax/scribblings/transformer-helpers.scrbl +++ b/pkgs/racket-doc/syntax/scribblings/transformer-helpers.scrbl @@ -10,3 +10,4 @@ @include-section["struct.scrbl"] @include-section["path-spec.scrbl"] @include-section["template.scrbl"] +@include-section["transformer.scrbl"] diff --git a/pkgs/racket-doc/syntax/scribblings/transformer.scrbl b/pkgs/racket-doc/syntax/scribblings/transformer.scrbl new file mode 100644 index 0000000000..b673c605aa --- /dev/null +++ b/pkgs/racket-doc/syntax/scribblings/transformer.scrbl @@ -0,0 +1,39 @@ +#lang scribble/doc +@(require "common.rkt" scribble/eval (for-label syntax/transformer)) + +@(define the-eval (make-base-eval)) +@(the-eval '(require syntax/transformer (for-syntax racket/base syntax/transformer))) + +@title[#:tag "syntax/transformer"]{Creating Macro Transformers} + +@defmodule[syntax/transformer] + +@defproc[(make-variable-like-transformer [reference-stx syntax?] + [setter-stx (or/c syntax? #f) #f]) + set!-transformer?]{ + +Creates a transformer that replaces references to the macro identifier +with @racket[reference-stx]. Uses of the macro in operator position +are interpreted as an application with @racket[reference-stx] as the +function and the arguments as given. + +If the macro identifier is used as the target of a @racket[set!] form, +then the @racket[set!] form expands into the application of +@racket[setter-stx] to the @racket[set!] expression's right-hand side, +if @racket[setter-stx] is syntax; otherwise, the identifier is +considered immutable and a syntax error is raised. + +@examples[#:eval the-eval +(define the-box (box add1)) +(define-syntax op + (make-variable-like-transformer + #'(unbox the-box) + #'(lambda (v) (set-box! the-box v)))) +(op 5) +(set! op 0) +op +] + +} + +@close-eval[the-eval]