From 9fe1e69c23a41e5501eaf438814e50e9363c4a42 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Tue, 15 Mar 2022 23:45:59 +0900 Subject: [PATCH] partial fix for issue #816 --- lib/chibi/syntax-case.sld | 6 +++--- lib/init-7.scm | 8 ++++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/chibi/syntax-case.sld b/lib/chibi/syntax-case.sld index 1b8f261e..65aac46f 100644 --- a/lib/chibi/syntax-case.sld +++ b/lib/chibi/syntax-case.sld @@ -8,12 +8,12 @@ (import (rename (chibi) (define-syntax %define-syntax) (let-syntax %let-syntax) - (letrec-syntax %letrec-syntax) - make-variable-transformer) + (letrec-syntax %letrec-syntax)) (only (chibi ast) env-cell macro? macro-aux macro-aux-set! procedure-arity procedure-variadic? - procedure-variable-transformer?) + procedure-variable-transformer? + make-variable-transformer) (only (meta) environment) (srfi 1) (srfi 11) diff --git a/lib/init-7.scm b/lib/init-7.scm index 6d1d68cb..4725d972 100644 --- a/lib/init-7.scm +++ b/lib/init-7.scm @@ -873,8 +873,12 @@ (set! count (+ count 1)) (rename (string->symbol (string-append s (%number->string count))))) (define (expand-pattern pat tmpl) - (let lp ((p (if (pair? pat) (cdr pat) pat)) - (x (if (pair? pat) (list _cdr _expr) _expr)) + (define full-match? + (or (not (pair? pat)) + (and (compare (car pat) (rename 'set!)) + (any (lambda (x) (compare x (rename 'set!))) lits)))) + (let lp ((p (if full-match? pat (cdr pat))) + (x (if full-match? _expr (list _cdr _expr))) (dim 0) (vars '()) (k (lambda (vars)