ir-macro-transformer was broken
This commit is contained in:
parent
4e98d37ab1
commit
d9398828c0
|
@ -600,10 +600,23 @@
|
||||||
(identifier=? use-env x use-env y))
|
(identifier=? use-env x use-env y))
|
||||||
(make-syntactic-closure use-env '() (f expr rename compare))))
|
(make-syntactic-closure use-env '() (f expr rename compare))))
|
||||||
|
|
||||||
|
(define (acons key val alist)
|
||||||
|
(cons (cons key val) alist))
|
||||||
|
|
||||||
(define (ir-macro-transformer f)
|
(define (ir-macro-transformer f)
|
||||||
(lambda (expr use-env mac-env)
|
(lambda (expr use-env mac-env)
|
||||||
(define (inject identifier)
|
(let ((wrapped '()))
|
||||||
(make-syntactic-closure use-env '() identifier))
|
(define (inject obj)
|
||||||
|
(let ((s (make-syntactic-closure use-env '() obj)))
|
||||||
|
(set! wrapped (acons s obj wrapped))
|
||||||
|
s))
|
||||||
|
(define (extract obj)
|
||||||
|
(let ((t (assq obj wrapped)))
|
||||||
|
(if t (cdr t) obj)))
|
||||||
|
(define (wrap expr)
|
||||||
|
(walk inject expr))
|
||||||
|
(define (unwrap expr)
|
||||||
|
(walk extract expr))
|
||||||
(define (compare x y)
|
(define (compare x y)
|
||||||
(identifier=? use-env x use-env y))
|
(identifier=? use-env x use-env y))
|
||||||
(make-syntactic-closure mac-env '() (f (walk inject expr) inject compare))))
|
(make-syntactic-closure mac-env '() (unwrap (f (wrap expr) inject compare))))))
|
||||||
|
|
Loading…
Reference in New Issue