removing double renaming of explicit ellipsis in syntax-rules

This commit is contained in:
Alex Shinn 2016-02-27 16:14:10 +09:00
parent 207ae1f24e
commit fb78ec1d1c
2 changed files with 61 additions and 1 deletions

View file

@ -693,7 +693,7 @@
(_vector->list (rename 'vector->list))
(_list->vector (rename 'list->vector))
(_cons3 (rename 'cons-source)))
(define ellipsis (rename (if ellipsis-specified? (cadr expr) '...)))
(define ellipsis (if ellipsis-specified? (cadr expr) (rename '...)))
(define lits (if ellipsis-specified? (car (cddr expr)) (cadr expr)))
(define forms (if ellipsis-specified? (cdr (cddr expr)) (cddr expr)))
(define (next-symbol s)

60
tests/syntax-tests.scm Normal file
View file

@ -0,0 +1,60 @@
(cond-expand
(modules (import (chibi) (only (chibi test) test-begin test test-end)))
(else #f))
(test-begin "syntax")
(define-syntax loop1
(sc-macro-transformer
(lambda (exp env)
(let ((body (cdr exp)))
`(call-with-current-continuation
(lambda (exit)
(let f ()
,@(map (lambda (exp)
(make-syntactic-closure env '(exit) exp))
body)
(f))))))))
(define exit 42)
(test 10 (loop1 (exit 10)))
(define (y) 0)
(define-syntax macro
(sc-macro-transformer
(lambda (exp env)
(make-syntactic-closure env '(y) (cadr exp)))))
(let ((y (lambda () 100)))
(test 0 (macro (y))))
(let ((x 10))
(define-syntax macro
(sc-macro-transformer
(lambda (exp env)
(make-syntactic-closure env '(x) (cadr exp)))))
(let ((x 20))
(define-syntax macro2
(sc-macro-transformer
(lambda (exp env)
(macro (make-syntactic-closure env '(x) (cadr exp))))))
(let ((x 30))
(test 20 (macro2 x)))))
(define E1 1)
(define-syntax M
(syntax-rules E1 ()
((M x E1) (quote (x E1)))))
(test '(1 2 3) (M 1 2 3))
(let ((E2 2))
(define-syntax N
(syntax-rules E2 ()
((N y E2) (quote (y E2)))))
(test '(1 2 3) (N 1 2 3)))
(test-end)