diff options
-rw-r--r-- | share/txr/stdlib/match.tl | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/share/txr/stdlib/match.tl b/share/txr/stdlib/match.tl index 80750e6c..2cca5322 100644 --- a/share/txr/stdlib/match.tl +++ b/share/txr/stdlib/match.tl @@ -860,9 +860,10 @@ (list ^@(require @nil (str= (sys:quasi ,(car args)) (sub-str ,str ,pos t))))) ;; `@var@...` (existing binding) - (((@(eq 'sys:var) @(bound-p vlist vars @sym) . @nil) . @rest) + ((@(as avar (@(eq 'sys:var) @(bound-p vlist vars @sym) . @nil)) + . @rest) (with-gensyms (txt len npos) - (list* ^@(with ,txt (sys:quasi ,(car args))) + (list* ^@(with ,txt (sys:quasi ,avar)) ^@(with ,len (len ,txt)) ^@(with ,npos (+ ,pos ,len)) ^@(require @nil @@ -920,10 +921,10 @@ (quasi-match vlist rest (cons sym vars) str npos)))) ;; `@var0@var1` (unbound followed by bound) (((@(eq 'sys:var) @sym) - (@(eq 'sys:var) @(bound-p vlist vars @bsym) . @mods) + @(as bvar (@(eq 'sys:var) @(bound-p vlist vars @bsym) . @mods)) . @rest) (with-gensyms (txt end npos) - (list* ^@(with ,txt (sys:quasi ,(cadr args))) + (list* ^@(with ,txt (sys:quasi ,bvar)) ^@(require @(with ,end (search-str ,str ,txt ,pos)) ,end) ^@(with ,npos (+ ,end (len ,txt))) |