summaryrefslogtreecommitdiffstats
path: root/stdlib
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib')
-rw-r--r--stdlib/match.tl11
1 files changed, 11 insertions, 0 deletions
diff --git a/stdlib/match.tl b/stdlib/match.tl
index 4a326fdb..30bf1cab 100644
--- a/stdlib/match.tl
+++ b/stdlib/match.tl
@@ -926,6 +926,17 @@
(cons ^@(require @(with ,npos (+ ,pos (len ,txt)))
(match-str ,str ,txt ,pos))
(quasi-match vlist rest vars str npos))))
+ ;; `@{var #/rx/}` (existing binding)
+ (((@(eq 'sys:var) @(bound-p vlist vars @sym) (@(regexp @reg))))
+ (list ^@(require @nil (equal ,sym (m^$ ,reg (sub-str ,str ,pos t))))))
+ ;; `@{var #/rx/}@...` (existing binding)
+ (((@(eq 'sys:var) @(bound-p vlist vars @sym) (@(regexp @reg))) . @rest)
+ (with-gensyms (len npos)
+ (list* ^@(require @(with ,len (match-regex ,str ,reg ,pos))
+ ,len)
+ ^@(with ,npos (+ ,pos ,len))
+ ^@(require @nil (equal ,sym (sub-str ,str ,pos ,npos)))
+ (quasi-match vlist rest vars str npos))))
;; `@var` (existing binding)
(((@(eq 'sys:var) @(bound-p vlist vars @sym) . @nil))
(list ^@(require @nil (match-str ,str (sys:quasi ,(car args))