From 780647f0eb7193d64ee34e6daa4f7992dbceecf7 Mon Sep 17 00:00:00 2001 From: AlexKnauth Date: Sun, 17 Mar 2019 22:54:11 -0400 Subject: [PATCH] return a procedure from make-variable-like-transformer So that make-variable-like-transformer produces a value that passes both procedure? and set!-transformer? --- racket/collects/syntax/transformer.rkt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/racket/collects/syntax/transformer.rkt b/racket/collects/syntax/transformer.rkt index b08844afb7..9f78cd160a 100644 --- a/racket/collects/syntax/transformer.rkt +++ b/racket/collects/syntax/transformer.rkt @@ -4,17 +4,22 @@ (provide make-variable-like-transformer) +(struct variable-like-transformer [procedure] + #:property prop:procedure (struct-field-index procedure) + #:property prop:set!-transformer (struct-field-index procedure)) + (define (make-variable-like-transformer ref-stx [set!-handler #f]) - (unless (syntax? ref-stx) - (raise-type-error 'make-variable-like-transformer "syntax?" ref-stx)) + (unless (or (syntax? ref-stx) (procedure? ref-stx)) + (raise-type-error 'make-variable-like-transformer "(or/c syntax? procedure?)" ref-stx)) (unless (or (syntax? set!-handler) (procedure? set!-handler) (eq? set!-handler #f)) (raise-type-error 'make-variable-like-transformer "(or/c syntax? procedure? #f)" set!-handler)) - (make-set!-transformer + (variable-like-transformer (lambda (stx) (syntax-case stx (set!) [id (identifier? #'id) - ref-stx] + (cond [(procedure? ref-stx) (ref-stx stx)] + [else ref-stx])] [(set! id val) (cond [(procedure? set!-handler) (set!-handler stx)]