From d769a7970c4b54a7c95451fda5493d3ee6990577 Mon Sep 17 00:00:00 2001 From: Daphne Preston-Kendal Date: Mon, 3 Jan 2022 09:50:07 +0100 Subject: [PATCH] Wrap identifier-syntax output in make-transformer --- lib/chibi/syntax-case.scm | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/lib/chibi/syntax-case.scm b/lib/chibi/syntax-case.scm index 772ade43..45811109 100644 --- a/lib/chibi/syntax-case.scm +++ b/lib/chibi/syntax-case.scm @@ -381,22 +381,28 @@ (define-current-ellipsis ellipsis) . body)))))) -;; identifier-syntax definition from R6RS Libraries section 12.9 +;; identifier-syntax adapted from R6RS Libraries section 12.9 +;; (changes: use only round brackets; can't use fenders in Chibi +;; syntax-rules; wrap the transformer procedures in make-transformer +;; so they can be used in Chibi anywhere a syntax transformer is +;; used, not just in {define,let,letrec}-syntax) (define-syntax identifier-syntax (syntax-rules (set!) ((_ e) - (lambda (x) - (syntax-case x () - (id (identifier? #'id) #'e) - ((_ x (... ...)) #'(e x (... ...)))))) + (make-transformer + (lambda (x) + (syntax-case x () + (id (identifier? #'id) #'e) + ((_ x (... ...)) #'(e x (... ...))))))) ((_ (id exp1) ((set! var val) exp2)) #;(and (identifier? #'id) (identifier? #'var)) - (make-variable-transformer + (make-transformer + (make-variable-transformer (lambda (x) (syntax-case x (set!) ((set! var val) #'exp2) ((id x (... ...)) #'(exp1 x (... ...))) - (id (identifier? #'id) #'exp1))))))) + (id (identifier? #'id) #'exp1)))))))) ;; Local variables: ;; eval: (put '%define-syntax 'scheme-indent-function 1)