ruby-trunk-changes r40791 - r40801

nobu:r40791 2013-05-17 11:07:00 +0900

TH_PUSH_TAG() で tag 構造体に含まれる jmpbuf の内容に書き込みをしてみて書き込み可能であることをチェックする処理を入れるようにしています。コミットログによるとスタックオーバフロー時に不正なタグを push してしまうのを事前に防ぐためとのこと。なんとなく類推して r40767 のあたりで "clobberred by 'setjmp'..." の類の警告の除去をしようとすると test_stack_size のタイムアウトが起きてしまった件の対処でしょうか。

svn:r40792 2013-05-17 11:07:04 +0900

version.h の日付更新。

akr:r40793 2013-05-17 12:11:42 +0900

拡張ライブラリ socket で Socket::Ifaddr#ifindex を実装する関数の rdoc 用コメントが if_nametoindex() の有無のチェックをする #if の前に置かれていて認識されていなかったので、#if の中、関数の直前に置くように修正しています。

nobu:r40794 2013-05-17 12:39:40 +0900

r40760 で "clobbered by 'setjmp' or 'vfork'" の警告除去のため vm.c (vm_exec()) の変数に volatile を付けて抑制していたのを TH_PUSH_TAG() の後のブロック内に宣言を移動する対処法に変更しています。

nobu:r40795 2013-05-17 17:35:26 +0900

RB_GC_GUARD() で変数をコンパイラの最適化を回避してスタックに割り合てるために使う rb_gc_guarded_ptr() を gcc と MSVC 以外のコンパイラ向けに引数と戻り値に volatile を付けて宣言した関数を定義するようにしています。 gcc と MSVC の時はそれぞれマクロと最適化 OFF の pragma つきの inline 関数で定義していましたが、これは inline 関数ではなく gc.c に定義を追加しています。多分そのほうが(inline 関数より)最適化を回避しやすいからかなーと推測します。

akr:r40796 2013-05-17 18:10:16 +0900

configure でコンパイラのバージョンを取得する処理で、いくつかのバージョン番号表示のためのオプションを試すのですが、コンパイラのエラーメッセージをみてどれがうまくいっているかを検出するための処理を入れています。 Sun Studio C が不正なオプションを付けた時にメッセージを出した上で正常終了してしまうためうまくバージョン番号を取得できていなかったのに対処。

knu:r40797 2013-05-17 19:27:32 +0900

misc/ruby-electric.el で $' とか ?\" のように特殊変数や ? 記法に使われて文字列リテラルのクオート記号として使われないクオート文字を入力した時に対応する閉じクオート文字を自動挿入しないようにしているそうです。

zzak:r40798 2013-05-17 21:49:25 +0900

Fiber のマシンスタック用のメモリ領域をキャッシュする個数を定義する定数の typo を修正して MAX_MACHINE_STACK_CACHE にしています。 http://github.com/ruby/ruby/issues/307

akr:r40799 2013-05-17 22:04:17 +0900

拡張ライブラリ socket の Socket::Ifaddr の ifa_flags を 64bit 符号なし整数として(LONG_LONG が利用可能なら)定義するようにしています。 SunOS 5.11 (OpenIndiana) が uint64_t として定義しているためとのこと。

akr:r40800 2013-05-18 00:39:59 +0900

拡張ライブラリ socket で定数マクロの値を Ruby の定数として定義するコードを生成するために使う ext/socket/mkconstants.rb で数値の変換マクロを定義する処理を INT2NUM() または UINT2NUM() を使うようにしていたのを LL2NUM(), ULL2NUM() などを利用するようにして int より大きな定数も変換できるようにしています。

svn:r40801 2013-05-18 00:40:03 +0900

version.h の日付更新。