Opened 7 years ago
#1465 new defect
get-keyword fails to operate correctly if keywords in first and second arguments come from different environments
| Reported by: | jrobbins | Owned by: | |
|---|---|---|---|
| Priority: | major | Milestone: | someday |
| Component: | core libraries | Version: | 4.13.0 |
| Keywords: | Cc: | ||
| Estimated difficulty: | trivial |
Description
Run the following code in csi, and you'll get a failed assertion:
(define-syntax keyword-from-syntax (syntax-rules () ((_) #:k))) (assert (get-keyword (keyword-from-syntax) '(h i j #:k l)))
This should return l, but instead it returns #f. The bug occurs when a keywords from different environments are compared; the #:k from the syntax-rules is not being treated as equal to the #:k from the normal code for some reason.
A working replacement (and the replacement I use in my code) could be as follows:
(define (get-keyword kw args . default)
(let (
(tail (memq kw args))
)
(if (and tail (not (null? (cdr tail))))
(cadr tail)
(if (null? default)
#f
((car default))
)
)
)
)
Note: See
TracTickets for help on using
tickets.
