diff options
Diffstat (limited to 'stdlib')
-rw-r--r-- | stdlib/match.tl | 11 |
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)) |