At Tue, 31 Dec 2002 19:24:29 +0000, I wrote: > knu Tue, 31 Dec 2002 19:24:29 +0000 > > Modified files: > ruby: > node.h ChangeLog > Log: > * node.h (struct RNode): Change argc from int to long. Otherwize > NEW_CFUNC() sets argc to a wrong value on platforms where > sizeof(int) != sizeof(long) and the byte order is big-endian. > This fixes breakage on FreeBSD/sparc64. > > Revision Changes Path > 1.39 +3 -3 ruby/node.h > http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/ruby/node.h?cvsroot=src&r1=1.38&r2=1.39 これですが、 rev 1.12 (ruby 1.4.5 の前)で int -> long になって 以来ずっと long だったが、 1.7 の途中、 rev 1.31 で int に戻った ようです。 http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/ruby/node.h#rev1.31 ChangeLog を見ても理由が見あたらないのですが、意図は何だったか 心当たりはありませんか? int argc にするなら NEW_CFUNC() と rb_node_newnode() で正しく 型を変換するようにしないとまずそうです。FreeBSD/sparc64 で観察 した限りでは、 int より long が大きくて big-endian なので、 argc の格納時は u2.node から入れるので long 幅に拡張されて格納 されますが、取り出すときは u2.argc が int なので、得られるのは 上位部分(事実上 0)だけ、という状況でした。 他のビッグエンディアン環境では問題ないのかなあ。報告を聞かない から FreeBSD/sparc64 の gcc 固有? -- / /__ __ Akinori.org / MUSHA.org / ) ) ) ) / FreeBSD.org / Ruby-lang.org Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp "I believe in what I see, I believe in what I hear, I believe that what I'm feeling changes how the world appears."