Nix er-macro-transformer*, extend syntax-rules for identifier macros

This commit is contained in:
Daphne Preston-Kendal 2022-03-15 09:37:52 +01:00
parent 7a4e793e49
commit 86e8b56289

View file

@ -143,21 +143,13 @@
(lambda (expr use-env mac-env) (lambda (expr use-env mac-env)
(f expr mac-env)))) (f expr mac-env))))
(define er-macro-transformer* (define er-macro-transformer
(lambda (f) (lambda (f)
(lambda (expr use-env mac-env) (lambda (expr use-env mac-env)
(f expr (f expr
(make-renamer mac-env) (make-renamer mac-env)
(lambda (x y) (identifier=? use-env x use-env y)))))) (lambda (x y) (identifier=? use-env x use-env y))))))
(define er-macro-transformer
(lambda (f)
(er-macro-transformer*
(lambda (expr rename compare)
(if (not (pair? expr))
(error "invalid use of non-identifier macro outside operator position" expr)
(f expr rename compare))))))
(define-syntax cond (define-syntax cond
(er-macro-transformer (er-macro-transformer
(lambda (expr rename compare) (lambda (expr rename compare)
@ -881,8 +873,8 @@
(set! count (+ count 1)) (set! count (+ count 1))
(rename (string->symbol (string-append s (%number->string count))))) (rename (string->symbol (string-append s (%number->string count)))))
(define (expand-pattern pat tmpl) (define (expand-pattern pat tmpl)
(let lp ((p (cdr pat)) (let lp ((p pat)
(x (list _cdr _expr)) (x _expr)
(dim 0) (dim 0)
(vars '()) (vars '())
(k (lambda (vars) (k (lambda (vars)