SIXX 0.2c でのフェイルを少し追い掛けてみた.テスト環境は以下のとおり.
- 3.9 + YAXO (XML-Parser-mir.9): sq3.9-7067dev07.08.1
- 3.10 + YAXO (XML-Parser-mir.9): Squeak3.10beta.7143 + Squeak-web beta image 0.128
- SIXX-mu.103
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 件のコメント:
コメントを投稿