adding unhygiene tests

This commit is contained in:
Alex Shinn 2009-04-08 22:44:24 +09:00
parent 90280258d0
commit 60a435825d
4 changed files with 45 additions and 0 deletions

View file

@ -2,3 +2,4 @@
2
3
4
5

View file

@ -10,3 +10,16 @@
(write (or #f tmp))
(newline))
(write
(letrec-syntax
((myor
(er-macro-transformer
(lambda (expr rename compare)
(if (null? (cdr expr))
#f
(list (rename 'let) (list (list (rename 'tmp) (cadr expr)))
(list (rename 'if) (rename 'tmp)
(rename 'tmp)
(cons (rename 'myor) (cddr expr)))))))))
(let ((tmp 5)) (myor #f tmp))))
(newline)

View file

@ -0,0 +1,4 @@
1
1
1
6

View file

@ -0,0 +1,27 @@
(define-syntax aif
(sc-macro-transformer
(lambda (form environment)
(let ((condition
(make-syntactic-closure environment '() (cadr form)))
(consequent
(make-syntactic-closure environment '(it) (caddr form)))
(alternative
(make-syntactic-closure environment '() (cadddr form))))
`(let ((it ,condition))
(if it
,consequent
,alternative))))))
(write (aif 1 it 3))
(newline)
(write (let ((it 4)) (aif 1 it 3)))
(newline)
(write (let ((it 4)) (aif (let ((it 5)) 1) it 3)))
(newline)
(write (let ((it 4)) (aif (let ((it 5)) 1) (let ((it 6)) it) 3)))
(newline)