don't include underscore in ellipsis pattern vars (issue #421)

This commit is contained in:
Alex Shinn 2017-07-02 22:10:03 +09:00
parent c80a1ece92
commit db186784e3
2 changed files with 8 additions and 1 deletions

View file

@ -829,7 +829,8 @@
(define (all-vars x dim) (define (all-vars x dim)
(let lp ((x x) (dim dim) (vars '())) (let lp ((x x) (dim dim) (vars '()))
(cond ((identifier? x) (cond ((identifier? x)
(if (any (lambda (lit) (compare x lit)) lits) (if (or (any (lambda (lit) (compare x lit)) lits)
(compare x _underscore))
vars vars
(cons (cons x dim) vars))) (cons (cons x dim) vars)))
((ellipsis? x) (lp (car x) (+ dim 1) (lp (cddr x) dim vars))) ((ellipsis? x) (lp (car x) (+ dim 1) (lp (cddr x) dim vars)))

View file

@ -473,6 +473,12 @@
((foo _) '_))) ((foo _) '_)))
(test '_ (underscore foo)) (test '_ (underscore foo))
(let ()
(define-syntax underscore2
(syntax-rules ()
((underscore2 (a _) ...) 42)))
(test 42 (underscore2 (1 2))))
(define-syntax count-to-2 (define-syntax count-to-2
(syntax-rules () (syntax-rules ()
((_) 0) ((_) 0)