`(,(rename 'er-macro-transformer)
(,(rename 'lambda)
(,r-form ,r-rename ,r-compare)
- (,(rename 'declare) (ignore ,r-compare))
,@(if (null? clauses)
- `((,(rename 'declare) (ignore ,r-rename)))
+ `((,(rename 'declare) (ignore ,r-rename ,r-compare)))
'())
,(let loop
((clauses
`(let ((,r-dict
(,(rename 'syntax-rules:match-datum)
,(syntax-quote pattern)
- (cdr ,r-form))))
+ (cdr ,r-form)
+ ,r-rename
+ ,r-compare)))
(if ,r-dict
(,(rename 'syntax-rules:expand-template)
,(syntax-quote template)
(syntax-error "Mixed segments in template:"
(map car pvs**))))))))
\f
-(define (syntax-rules:match-datum pattern datum)
+(define (syntax-rules:match-datum pattern datum rename compare)
(define (match-datum pat datum dict k)
(lambda (pats datum dict)
(match-datum (car pats) datum dict k))))
((literal)
- (and (equal? (car x) datum)
+ (and (let ((literal (car x)))
+ (if (identifier? literal)
+ (and (identifier? datum)
+ (compare (rename literal) datum))
+ (equal? literal datum)))
(k dict)))
((var) (k (dict-add (car x) datum dict)))
((anon-var) (k dict))
((_ a b ... . c)
(quote (a (b ...) c)))))
(assert-equal (bar 1 2 3 4) '(1 (2 3 4) ()))
- (assert-equal (bar 1 2 3 . 4) '(1 (2 3) 4))))
\ No newline at end of file
+ (assert-equal (bar 1 2 3 . 4) '(1 (2 3) 4))))
+
+(define-test 'bug-63503
+ (lambda ()
+ (define-syntax foo
+ (syntax-rules (keyword)
+ ((foo keyword x) x)))
+ (define-syntax bar
+ (syntax-rules ()
+ ((bar x)
+ (foo keyword x))))
+ (assert-equal (bar 123) 123)))
\ No newline at end of file