不可解バグの原因判明

id:mjt:20090310:p3 などでお騒がせしている trunk 版 Mosh の不可解なバグの原因が分かった。

現象

シリアライズされた (mosh test) ライブラリを import すると &condition-rcd を指していたはずの参照が別のものに置き換わる

原因

Fasl シリアライズ時に intern されたシンボルとされていないシンボルを区別せず、全て intern されたシンボルとして読み書きしていた。
これにより同じ文字列を持つシンボルに対して eq? が成り立ってしまい label->binding のテーブルが上書きされていた。

このバグの原因見つけるのが難しかった理由

観察用のコードを挿入すると gensym の index がずれることにより、現象が再現しなくなる。

修正

Fasl の read/write を直す予定。