summaryrefslogtreecommitdiffstats
path: root/stdlib
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib')
-rw-r--r--stdlib/match.tl12
1 files changed, 9 insertions, 3 deletions
diff --git a/stdlib/match.tl b/stdlib/match.tl
index 3adbba27..c59179f3 100644
--- a/stdlib/match.tl
+++ b/stdlib/match.tl
@@ -275,21 +275,27 @@
(if (and (consp head) (eq (car head) 'sys:var))
(tree-case exp
(((t rvar) (op . args))
- (let* ((avar
+ (let* ((arg-var (gensym "obj-"))
+ (avar
(condlet
(((vm (member-if [andf consp (op eq (car @1) 'sys:var)]
args)))
(let ((sym (cadar vm)))
+ (if (null sym)
+ (set sym arg-var)
+ (set arg-var sym))
(set args (append (ldiff args vm)
(list sym)
(cdr vm)))
sym))
(((vm (memq 'sys:var args)))
(let ((sym (cadr vm)))
+ (if (null sym)
+ (set sym arg-var)
+ (set arg-var sym))
(set args (append (ldiff args vm) sym))
sym))))
- (res-var (gensym "res-"))
- (arg-var (if avar avar (gensym "obj-"))))
+ (res-var (gensym "res-")))
(unless avar
(set args (append args (list arg-var))))
(let* ((guard (new match-guard