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! はほとんど使わないからか。