Don't treat underscore as a pattern variable. Fixes issue #382.

This commit is contained in:
Alex Shinn 2017-01-01 09:48:34 +09:00
parent 71f4db7d17
commit 9fa8d8c1f0
2 changed files with 10 additions and 2 deletions

View file

@ -706,7 +706,8 @@
(_reverse (rename 'reverse)) (_reverse (rename 'reverse))
(_vector->list (rename 'vector->list)) (_vector->list (rename 'vector->list))
(_list->vector (rename 'list->vector)) (_list->vector (rename 'list->vector))
(_cons3 (rename 'cons-source))) (_cons3 (rename 'cons-source))
(_underscore (rename '_)))
(define ellipsis (if ellipsis-specified? (cadr expr) (rename '...))) (define ellipsis (if ellipsis-specified? (cadr expr) (rename '...)))
(define lits (if ellipsis-specified? (car (cddr expr)) (cadr expr))) (define lits (if ellipsis-specified? (car (cddr expr)) (cadr expr)))
(define forms (if ellipsis-specified? (cdr (cddr expr)) (cddr expr))) (define forms (if ellipsis-specified? (cdr (cddr expr)) (cddr expr)))
@ -729,7 +730,9 @@
(list _and (list _and
(list _compare v (list _rename (list _quote p))) (list _compare v (list _rename (list _quote p)))
(k vars)) (k vars))
(list _let (list (list p v)) (k (cons (cons p dim) vars))))) (if (compare p _underscore)
(k vars)
(list _let (list (list p v)) (k (cons (cons p dim) vars))))))
((ellipsis? p) ((ellipsis? p)
(cond (cond
((not (null? (cdr (cdr p)))) ((not (null? (cdr (cdr p))))

View file

@ -460,6 +460,11 @@
(part-2x (10 (+ 21 22) (31 32) (41 42) (51 52) (+ 61 2) 77 . "tail"))) (part-2x (10 (+ 21 22) (31 32) (41 42) (51 52) (+ 61 2) 77 . "tail")))
;; underscore ;; underscore
(define-syntax underscore
(syntax-rules ()
((foo _) '_)))
(test '_ (underscore foo))
(define-syntax count-to-2 (define-syntax count-to-2
(syntax-rules () (syntax-rules ()
((_) 0) ((_) 0)