artonです。
ruby-1.8のcvs headをVC++8でmakeするとtime_tが64ビットになった関係でTime
クラスを利用するテスト(たとえばyaml)の幾つかがフェイラーになります。
原因は、VC++の場合についてはtime_tは64ビットになったものの、Win32が提供
するstruct timevalのメンバーが32ビットのままなので、struct timevalにMSB
が立っている値が設定されると取り出し時に符号拡張されて負値になるからです。
たとえばTime.atの引数がFixnumの場合は負値チェックに引っかかりますが、
Rationalを引数にした場合などでこの状態になります。
とりあえずtime_tが64ビットかつWin32の場合に符号拡張を抑制するパッチを
http://arton.no-ip.info/data/time.patch に作ってみましたが、struct
timevalを利用しないようにするといった将来的に時刻表現が64ビット化される
ことを見越したもっとうまいやり方があると思いますので、検討していただけな
いでしょうか。
--
arton <artonx@xxxxxxxxxxx>
--------------------------------------
GANBARE! NIPPON!
Yahoo! JAPAN JOC OFFICIAL INTERNET PORTAL SITE PARTNER
http://pr.mail.yahoo.co.jp/ganbare-nippon/
|