GCのせい?

“Lisp as an Alternative to Java”のお題を Squeak Smalltalk で - Smalltalkのtは小文字ですに習ってioで挑戦中なんだけど、どうも挙動が…。

方針としては、マッピングに列挙された文字オブジェクトそのものに、対応する数値を入れた"asDigit"スロットを追加する。結果的には、全てのアルファベット1文字からなる52個のオブジェクトに"asDigit"スロットが追加される。で、文字列のプロトタイプオブジェクトに"asDigits"スロットを追加し、構成する文字の"asDigit"スロットの数値を連結して返却する。
ちょっと乱暴だけど、プロトタイプベースっぽい感じで実装してみるテストです。
で、結果が下のコードです。

list("E","JNQ","RWX","DSY","FT","AM","CIV","BKU","LOP","GHZ") map(seq, list(seq, seq asLowercase)) foreach(i, l,
    l foreach(seq,
        seq foreach(c,
            c asCharacter asDigit := i asString
        )
    )
)

Sequence asDigits := method(
    r := "" asMutable
    self foreach(c, if(c asCharacter hasSlot("asDigit"), r append(c asCharacter asDigit at(0)), r))
    r
)

ところが、挙動を調べてみると、以下のように、途中で"g"オブジェクトの"asDigit"スロットが消失してるわけ。
2つめのまでは"g" asDigitは存在するけど、3つめの"hoge" asDigitでは既に消えていて、再び"g" asDigitとすると「そんなスロットねーよ!」と怒られました。

Io> "g" asDigit
==> 9
Io> "g" asDigits
==> 9
Io> "hoge" asDigits
==> 80
Io> "g" asDigit

  Exception: Sequence does not respond to 'asDigit'
  ---------
  Sequence asDigit                     Command Line 1

GCの影響…なんだろか。

と言うところまで。