chicken-janitors
[Top][All Lists]
Advanced

[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: Wed, 22 Mar 2017 14:49:47 -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):

 Note debugging with `##core#syntax` shows the expansion is correct:

 {{{
 (begin151
  (define-record-type152 stuff (make-stuff foo bar) stuff?
    (foo stuff-foo %set148)
    (bar stuff-bar %set150))
  (define153 (stuff-foo-set! x154 v155)
    (display156 "mutation is evil!\n")
    (%set148 x154 v155))
  (define153 (stuff-bar-set! x154 v155)
    (display156 "mutation is evil!\n")
    (%set150 x154 v155)))
 }}}

 Also, debugging the `define-record-type` macro show it's output also looks
 correct:

 {{{
 (##core#begin
  (define221 (make-stuff foo bar)
    (##sys#make-structure (##core#quote stuff) foo bar))
  (define221 (stuff? x223)
    (##sys#structure? x223 (##core#quote stuff)))
  (define221 stuff-foo
    (##core#lambda (x223)
      (##core#check (##sys#check-structure x223 (##core#quote stuff)
 (##core#quote stuff-foo)))
      (##sys#block-ref x223 1)))
  (define221 %set212
    (##core#lambda (x223 y224)
      (##core#check (##sys#check-structure x223 (##core#quote stuff)
 (##core#quote #f)))
      (##sys#block-set! x223 1 y224)))
  (define221 stuff-bar
    (##core#lambda (x223)
      (##core#check (##sys#check-structure x223 (##core#quote stuff)
 (##core#quote stuff-bar)))
      (##sys#block-ref x223 2)))
  (define221 %set214
    (##core#lambda (x223 y224)
      (##core#check (##sys#check-structure x223 (##core#quote stuff)
 (##core#quote #f)))
      (##sys#block-set! x223 2 y224))))
 }}}

 however, it seems that hygiene is stripped from all defined identifiers,
 so the renamed sets all revert to %set.

--
Ticket URL: <https://bugs.call-cc.org/ticket/1355#comment:2>
CHICKEN Scheme <https://www.call-cc.org/>
CHICKEN Scheme is a compiler for the Scheme programming language.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]