diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2021-04-25 11:04:11 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2021-04-25 11:04:11 -0700 |
commit | a96d1e927faba7300a3bc4108ff93af97707c947 (patch) | |
tree | ef2176ed392334d523d299588bae2855231e9a06 /share/txr/stdlib/match.tl | |
parent | 8280c77142467d28cafcf2f79dfdb64861f01632 (diff) | |
download | txr-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.tl | 8 |
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) |