diff --git a/tests/basic/test09-hygiene.res b/tests/basic/test09-hygiene.res index 94ebaf90..8a1218a1 100644 --- a/tests/basic/test09-hygiene.res +++ b/tests/basic/test09-hygiene.res @@ -2,3 +2,4 @@ 2 3 4 +5 diff --git a/tests/basic/test09-hygiene.scm b/tests/basic/test09-hygiene.scm index f6c547a4..c3f0bb7e 100644 --- a/tests/basic/test09-hygiene.scm +++ b/tests/basic/test09-hygiene.scm @@ -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) diff --git a/tests/basic/test10-unhygiene.res b/tests/basic/test10-unhygiene.res new file mode 100644 index 00000000..69584714 --- /dev/null +++ b/tests/basic/test10-unhygiene.res @@ -0,0 +1,4 @@ +1 +1 +1 +6 diff --git a/tests/basic/test10-unhygiene.scm b/tests/basic/test10-unhygiene.scm new file mode 100644 index 00000000..90bc5ef6 --- /dev/null +++ b/tests/basic/test10-unhygiene.scm @@ -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) +