[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Chicken-janitors] #1355: make define-record-type setters hygienic
From: |
Chicken Trac |
Subject: |
Re: [Chicken-janitors] #1355: make define-record-type setters hygienic |
Date: |
Mon, 20 Mar 2017 14:34:02 -0000 |
#1355: make define-record-type setters hygienic
-------------------------------------+-------------------------------------
Reporter: ashinn | Owner:
Type: defect | Status: new
Priority: major | Milestone: someday
Component: core | Version: 4.12.0
libraries | Keywords: define-record-type,
Resolution: | hygiene
Estimated difficulty: |
-------------------------------------+-------------------------------------
Comment (by ashinn):
A stripped down version:
{{{
(use test)
(define-syntax %defrec
(syntax-rules ()
((%defrec name make pred ((field get %set set) ...) ())
(begin
(define-record-type name make pred
(field get %set) ...)
(define (set x v)
(display "mutation is evil!\n")
(%set x v))
...))
((%defrec name make pred (fields ...) ((field get set) . rest))
(%defrec name make pred (fields ... (field get %set set)) rest))))
(define-syntax defrec
(syntax-rules ()
((defrec name make pred . fields)
(%defrec name make pred () fields))))
(defrec stuff (make-stuff foo bar) stuff?
(foo stuff-foo stuff-foo-set!)
(bar stuff-bar stuff-bar-set!))
(test-begin)
(let ((x (make-stuff "ab" "bar")))
(test "ab" (stuff-foo x))
(test "bar" (stuff-bar x))
(stuff-foo-set! x "xy") ;; <----- this uses the wrong %set
(test "xy" (stuff-foo x))
(test "bar" (stuff-bar x)))
(test-end)
}}}
--
Ticket URL: <https://bugs.call-cc.org/ticket/1355#comment:1>
CHICKEN Scheme <https://www.call-cc.org/>
CHICKEN Scheme is a compiler for the Scheme programming language.
- [Chicken-janitors] #1355: make define-record-type setters hygienic, Chicken Trac, 2017/03/20
- Re: [Chicken-janitors] #1355: make define-record-type setters hygienic,
Chicken Trac <=
- Re: [Chicken-janitors] #1355: make define-record-type setters hygienic, Chicken Trac, 2017/03/22
- Re: [Chicken-janitors] #1355: define strips hygiene from defined identifiers (was: make define-record-type setters hygienic), Chicken Trac, 2017/03/22
- Re: [Chicken-janitors] #1355: define strips hygiene from defined identifiers at top-level (was: define strips hygiene from defined identifiers), Chicken Trac, 2017/03/22
- Re: [Chicken-janitors] #1355: define strips hygiene from defined identifiers at top-level, Chicken Trac, 2017/03/22
- Re: [Chicken-janitors] #1355: define strips hygiene from defined identifiers at top-level, Chicken Trac, 2017/03/22