ぐる式 (貳) より引っ越し作業中.未完.

2007年8月25日土曜日

Squeak: SIXX を3.9 と 3.10 の Time now の違いに無理矢理対応させる

SIXX 0.2c でのフェイルを少し追い掛けてみた.テスト環境は以下のとおり.

3.9 と 3.10 での Time class>>now

3.9 と 3.10 では Time クラスの now メソッドに異同がある.

3.9 での Time class>>now
now    "Answer a Time representing the time right now - this is a 24 hour clock."    ^ self seconds: self totalSeconds \ 86400.
3.10 での Time class>>now
now    "Answer a Time representing the time right now - this is a 24 hour clock."    | ms |    ms := self milliSecondsSinceMidnight.    ^ self seconds:  (ms // 1000) nanoSeconds: (ms \ 1000) * 1000000

seconds:nanoSeconds: と seconds:

3.10 では seconds:nanoSeconds: メソッドが呼ばれるが, 3.9 では seconds: が呼ばれる.んでここが問題. seconds: メソッドは 3.9 でも 3.10 でもインスタンス変数 nanos に 0 をセットする.

seconds: seconds    "Answer a Time from midnight"    ^ self seconds: seconds nanoSeconds: 0

入力は nanos を考慮しない

printString はこの nanos を考慮しているように見えるが,結句丸め込まれる. NanosInSecond はプール変数で 1000000000.

Time>>sixxContentString    "Squeak Specific"    ^self printString
Duration>>seconds    "Answer the number of seconds the receiver represents."    ^ (seconds rem: SecondsInMinute) + (nanos / NanosInSecond)

一方, readFrom:nanos に 0 をセットするので,つまるところ nanos の値が 3.10 での SIXX のフェイルを引き起こす.以下は 3.9 だと true, 3.10 だと false が返る.

    | now nowString |    now := Time now.    nowString := now printString.    now = (Time readFromString: nowString)

改行コードの混在は眼をつぶるとしても,どうなのよ,これ orz.ともあれそっちは無視して SIXX だけしか見てないパッチ. readSixxContentStringFrom: がダサダサだけど勘弁して. SIXXpatch310.1.cs

0 件のコメント:

コメントを投稿