mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-19 13:49:17 +02:00
Nix er-macro-transformer*, extend syntax-rules for identifier macros
This commit is contained in:
parent
7a4e793e49
commit
86e8b56289
1 changed files with 3 additions and 11 deletions
|
@ -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)
|
||||||
|
|
Loading…
Add table
Reference in a new issue