Fix match with (list-no-order p ..k) patterns
p ..k matches exactly k repetitions of p, but its documented behavior is to match "k or more" repetitions. This fix implements the documented behavior. Fixes bug number 15122.
This commit is contained in:
parent
4f5d8da278
commit
a47800686c
|
@ -202,6 +202,26 @@
|
||||||
[(list-no-order 1 2 3 rest ...) rest]
|
[(list-no-order 1 2 3 rest ...) rest]
|
||||||
[_ 'no]))
|
[_ 'no]))
|
||||||
|
|
||||||
|
(comp '(x y z)
|
||||||
|
(match '(1 x 2 y 3 z)
|
||||||
|
[(list-no-order 1 2 3 rest ..1) rest]
|
||||||
|
[_ 'no]))
|
||||||
|
|
||||||
|
(comp '(x y z)
|
||||||
|
(match '(1 x 2 y 3 z)
|
||||||
|
[(list-no-order 1 2 3 rest ..2) rest]
|
||||||
|
[_ 'no]))
|
||||||
|
|
||||||
|
(comp '(x y z)
|
||||||
|
(match '(1 x 2 y 3 z)
|
||||||
|
[(list-no-order 1 2 3 rest ..3) rest]
|
||||||
|
[_ 'no]))
|
||||||
|
|
||||||
|
(comp 'no
|
||||||
|
(match '(1 x 2 y 3 z)
|
||||||
|
[(list-no-order 1 2 3 rest ..4) rest]
|
||||||
|
[_ 'no]))
|
||||||
|
|
||||||
(comp
|
(comp
|
||||||
'yes
|
'yes
|
||||||
(match '(a (c d))
|
(match '(a (c d))
|
||||||
|
|
|
@ -101,12 +101,11 @@
|
||||||
(ddk? #'dd)
|
(ddk? #'dd)
|
||||||
(let* ([count (ddk? #'dd)]
|
(let* ([count (ddk? #'dd)]
|
||||||
[min (if (number? count) count #f)]
|
[min (if (number? count) count #f)]
|
||||||
[max (if (number? count) count #f)]
|
|
||||||
[ps (syntax->list #'(p ...))])
|
[ps (syntax->list #'(p ...))])
|
||||||
(GSeq (cons (list (rearm+parse #'lp))
|
(GSeq (cons (list (rearm+parse #'lp))
|
||||||
(for/list ([p ps]) (list (parse p))))
|
(for/list ([p ps]) (list (parse p))))
|
||||||
(cons min (map (lambda _ 1) ps))
|
(cons min (map (lambda _ 1) ps))
|
||||||
(cons max (map (lambda _ 1) ps))
|
(cons #f (map (lambda _ 1) ps))
|
||||||
;; vars in lp are lists, vars elsewhere are not
|
;; vars in lp are lists, vars elsewhere are not
|
||||||
(cons #f (map (lambda _ #t) ps))
|
(cons #f (map (lambda _ #t) ps))
|
||||||
(Null (Dummy (syntax/loc stx _)))
|
(Null (Dummy (syntax/loc stx _)))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user