with-exception-handler の仕様を正しく理解しよう その6

with-exception-handler よりも先に dynamic-wind を実装することにした。理由は2つ。

  1. dynamic-wind の仕様を正しく理解できたので熱いうちに実装したい
  2. with-exception-handler の実装に dynamic-wind がつかえる

実装例をほぼそのままに実装した。call/cc と dynamic-wind が winders を共有する実装方法。Gauche の dynamic-wind のテストを利用してテストを用意。
すぐに2つのバグが発見される。どちらも多値がらみ。

  1. 参考に実装した例が多値を考慮していなかったので追加。
  2. 今回のバグではないが (values) の扱いが間違っていたので修正。


dynamic-wind を(今のところは)正しく実装できたのが感慨深い。call/cc よりもある意味難解だと思いこんでいた。