summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--share/txr/stdlib/match.tl14
1 files changed, 7 insertions, 7 deletions
diff --git a/share/txr/stdlib/match.tl b/share/txr/stdlib/match.tl
index ffb09e1c..64f53357 100644
--- a/share/txr/stdlib/match.tl
+++ b/share/txr/stdlib/match.tl
@@ -312,8 +312,8 @@
(car-match (compile-match car car-gensym var-list))
(cdr-match (if (consp cdr)
(caseq (car cdr)
- ((sys:expr sys:var) (compile-match cdr cdr-gensym
- var-list))
+ ((sys:expr sys:var sys:quasi)
+ (compile-match cdr cdr-gensym var-list))
(t (compile-cons-structure cdr cdr-gensym var-list)))
(compile-atom-match cdr cdr-gensym var-list)))
(guard (new match-guard
@@ -666,7 +666,7 @@
variadic-pattern args
forms body))
((proper-list-p args)
- (let* ((vpos (pos-if (lop meq 'sys:expr 'sys:var) args)))
+ (let* ((vpos (pos-if (lop meq 'sys:expr 'sys:var 'sys:quasi) args)))
(tree-bind (fixed-pats . variadic-pat) (split args vpos)
(new lambda-clause
orig-syntax args
@@ -764,13 +764,13 @@
(defun check (f op pat)
(if (or (not (listp pat))
- (meq (car pat) 'sys:expr 'sys:var))
+ (meq (car pat) 'sys:expr 'sys:var 'sys:quasi))
(compile-error f "~s: list pattern expected, not ~s" op pat)
pat))
(defun check-end (f op pat)
(if (and (listp pat)
- (meq (car pat) 'sys:expr 'sys:var))
+ (meq (car pat) 'sys:expr 'sys:var 'sys:quasi))
(compile-error f "~s: list or atom pattern expected, not ~s" op pat)
pat))
@@ -787,7 +787,7 @@
(defun pat-len (f pat)
(if (consp pat)
- (let ((var-op-pos (pos-if (op meq 'sys:var 'sys:expr)
+ (let ((var-op-pos (pos-if (op meq 'sys:var 'sys:expr 'sys:quasi)
(butlastn 0 pat))))
(if var-op-pos var-op-pos (len pat)))
0))
@@ -821,6 +821,7 @@
(match-case syntax
((@(eq 'sys:expr) (@(bindable) . @nil)) t)
((@(eq 'sys:var) @(or @(bindable) nil) . @nil) t)
+ ((@(eq 'sys:quasi) . @(some @(consp))) t)
((@pat . @rest) (or (non-triv-pat-p pat)
(non-triv-pat-p rest)))
(#R(@from @to) (or (non-triv-pat-p from)
@@ -944,4 +945,3 @@
(stringp ,str))
@(with ,pos 0)
,*(quasi-match var-list (normalize args) nil str pos)))))
-