From 54c276a0322a369079ba480aca98b4c0ddf70365 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Wed, 11 May 2022 07:48:12 -0700 Subject: lambda-match: bug: over-strict match in variadic pattern. * stdlib/match.tl (expand-lambda-match): A pattern that is shorter than the maximum number of arguments is augmented with a check ensuring that no fixed arguments are present beyond those that the pattern requires. However, this check must be omitted if the pattern is variadic, because those excess arguments match its tail pattern. * tests/011/patmatch.tl: Cases added. --- stdlib/match.tl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'stdlib') diff --git a/stdlib/match.tl b/stdlib/match.tl index 17870be2..55d50417 100644 --- a/stdlib/match.tl +++ b/stdlib/match.tl @@ -782,7 +782,7 @@ (when (> pc.nfixed min-args) (set exp ^(when ,[present-vec (pred pc.nfixed)] ,exp))) - (when (< pc.nfixed max-args) + (when (and (not vp) (< pc.nfixed max-args)) (set exp ^(unless ,[present-vec pc.nfixed] ,exp))) (when (and variadic (not vp) (= pc.nfixed max-args)) -- cgit v1.2.3