diff --git a/collects/redex/private/matcher.rkt b/collects/redex/private/matcher.rkt index 5ad7d96ccd..c51661dc44 100644 --- a/collects/redex/private/matcher.rkt +++ b/collects/redex/private/matcher.rkt @@ -1466,7 +1466,14 @@ before the pattern compiler is invoked. [else (let ([r-exp (car r-exps)]) (cond [(repeat? r-exp) - (append (repeat-empty-bindings r-exp) + (append (if (repeat-suffix r-exp) + (list ((if (repeat-mismatch? r-exp) + make-mismatch-bind + make-bind) + (repeat-suffix r-exp) + '())) + null) + (repeat-empty-bindings r-exp) (i-loop (cdr r-exps) ribs))] [else (loop (car r-exps) (i-loop (cdr r-exps) ribs))]))])))] diff --git a/collects/redex/tests/matcher-test.rkt b/collects/redex/tests/matcher-test.rkt index 8e58fc8450..38e4ad477c 100644 --- a/collects/redex/tests/matcher-test.rkt +++ b/collects/redex/tests/matcher-test.rkt @@ -203,6 +203,16 @@ (test-empty '(a ..._1 a ..._1) '(a a) (list (make-test-mtch (make-bindings (list (make-bind '..._1 1))) '(a a) none))) + + (test-empty '((a ..._1 a ..._1) ...) + '((a a a a)) + (list (make-test-mtch (make-bindings (list (make-bind '..._1 '(2)))) '((a a a a)) none))) + (test-empty '((a ..._!_1 a ..._!_1) ...) + '((a a a a)) + (list (make-test-mtch (make-bindings '()) '((a a a a)) none) + (make-test-mtch (make-bindings '()) '((a a a a)) none) + (make-test-mtch (make-bindings '()) '((a a a a)) none) + (make-test-mtch (make-bindings '()) '((a a a a)) none))) (test-empty '((name x a) ..._!_1 (name y a) ..._!_1) '(a a)