return a procedure from make-variable-like-transformer
So that make-variable-like-transformer produces a value that passes both procedure? and set!-transformer?
This commit is contained in:
parent
1efe1ebbf1
commit
780647f0eb
|
@ -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)]
|
||||
|
|
Loading…
Reference in New Issue
Block a user