set! のバグ修正
再現コード。
(import (rnrs)) (define-syntax increment! (syntax-rules () ((_ ?varname) (set! ?varname (+ ?varname 1))))) (do ((i 0 (+ 1 i)) (count 0)) ((= i 4)) (increment! count))
最小再現コード。
(letrec ((loop (lambda (i) (set! i 1) (loop 1)))) (loop '0))
pass3/$call で make-box と label の出現位置をミスってた。
まだこんなに単純なバグが残っていたのか。set! はほとんど使わないからか。