summaryrefslogtreecommitdiffstats
path: root/share/txr/stdlib/match.tl
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2021-04-25 11:04:11 -0700
committerKaz Kylheku <kaz@kylheku.com>2021-04-25 11:04:11 -0700
commita96d1e927faba7300a3bc4108ff93af97707c947 (patch)
treeef2176ed392334d523d299588bae2855231e9a06 /share/txr/stdlib/match.tl
parent8280c77142467d28cafcf2f79dfdb64861f01632 (diff)
downloadtxr-a96d1e927faba7300a3bc4108ff93af97707c947.tar.gz
txr-a96d1e927faba7300a3bc4108ff93af97707c947.tar.bz2
txr-a96d1e927faba7300a3bc4108ff93af97707c947.zip
match: third round of quasi tests and fixes.
* share/txr/stdlib/match.tl (expand-quasi-match): Add case fo r unbound var followed by var, followed by nothing. * tests/011/patmatch.tl: New tests.
Diffstat (limited to 'share/txr/stdlib/match.tl')
-rw-r--r--share/txr/stdlib/match.tl8
1 files changed, 8 insertions, 0 deletions
diff --git a/share/txr/stdlib/match.tl b/share/txr/stdlib/match.tl
index 2cca5322..514b06c6 100644
--- a/share/txr/stdlib/match.tl
+++ b/share/txr/stdlib/match.tl
@@ -921,6 +921,14 @@
(quasi-match vlist rest (cons sym vars) str npos))))
;; `@var0@var1` (unbound followed by bound)
(((@(eq 'sys:var) @sym)
+ @(as bvar (@(eq 'sys:var) @(bound-p vlist vars @bsym) . @mods)))
+ (with-gensyms (txt end)
+ (list ^@(with ,txt (sys:quasi ,bvar))
+ ^@(require @(with ,end (search-str ,str ,txt ,pos))
+ ,end (eql (+ , end (len ,txt)) (len ,str)))
+ ^@(with ,sym (sub-str ,str ,pos ,end)))))
+ ;; `@var0@var1...` (unbound followed by bound)
+ (((@(eq 'sys:var) @sym)
@(as bvar (@(eq 'sys:var) @(bound-p vlist vars @bsym) . @mods))
. @rest)
(with-gensyms (txt end npos)