ruby-trunk-changes r65744 - r65768

今日も主に integer の overflow や double の 0除算などの未定義挙動対策/警告除去などがありました。

normal: r65744 2018-11-16 07:28:03 +0900

マクロ RB_ALLOCV() と RB_ALLOCV_N() から不要な RB_GC_GUARD() を削除しています。コミットログをみるとコードサイズのためらしい。

svn: r65745 2018-11-16 07:28:06 +0900

r65744 のインデントのタブを空白に展開。

svn: r65746 2018-11-16 07:28:07 +0900

version.h の日付更新。

nobu: r65747 2018-11-16 09:25:53 +0900

pack.c のインデントの調整のみ。

nobu: r65748 2018-11-16 09:25:54 +0900

pack.c で未知の(つまり不正な)指示子があった時の警告出力を unknown_directive() という関数に切り出して、NUL 文字が含まれてた時にも対応するようにしています。

nobu: r65749 2018-11-16 09:28:43 +0900

bignum.c の big2ulong() で条件によって未使用になる変数の宣言を警告除去のために preprocessor の分岐内に入れています。

nobu: r65750 2018-11-16 09:37:48 +0900

tool/rbinstall.rb で rdoc の生成物をインストールする時に created.rid というファイルはコピーしないようにしています。

shyouhei: r65751 2018-11-16 10:52:39 +0900

double での 0除算を避ける修正を追加しています。

shyouhei: r65752 2018-11-16 11:34:00 +0900

r57045 の Onigmo の更新で enc/unicode.c の大文字小文字を無視したマッチのために 'A' - 'a' にしているのが負値になるので、先に 'a' を引いてから 'A' を加算するようにして overflow を避けています。

shyouhei: r65753 2018-11-16 11:59:30 +0900

bignum.c の BDIGIT の型が環境によって異なるので明示的なビット演算に落としたり BIGLO() に通す時に一旦 BIGDIGIT_DBL の変数に受けるようにしたりしています。

shyouhei: r65754 2018-11-16 12:09:00 +0900

bignum.c でも size_t の変数をループカウンタとして条件部で -- 演算子を使う書きかたを避けるようにしています。

shyouhei: r65755 2018-11-16 12:34:53 +0900

r65753 で big2dbl() でビットOR演算に変更していたところは加算後に下位バイトにマスクをかけるように修正しています。しばらく眺めてたんですが、もともとこの分岐がなにをしているのかよくわからなかったのであきらめました。

shyouhei: r65756 2018-11-16 13:05:53 +0900

r65751 の続きで numeric.c でも double の 0除算を避けるようにしています。

k0kubun: r65757 2018-11-16 13:21:57 +0900

予約語 undef のテストで呼び出すメソッド名が間違ってて undef したんじゃない(親クラスで undef してた)メソッドを呼んでたのを修正しています。 https://github.com/ruby/ruby/pull/2015

k0kubun: r65758 2018-11-16 13:25:07 +0900

拡張ライブラリ pty の PTY モジュールについての rdoc 用コメントの typo 修正。 https://github.com/ruby/ruby/pull/2014

nobu: r65759 2018-11-16 13:32:48 +0900

NEWS ファイルの NameError, KeyError についての変更を #initialize メソッドでなくクラスメソッド .new についての変更として書き変えています。

k0kubun: r65760 2018-11-16 15:45:16 +0900

AppVeyor で非常に大きな配列を作るテストを実行除外するようにしています。

svn: r65761 2018-11-16 15:45:17 +0900

r65760 の新規追加ファイルの svn property 設定。

k0kubun: r65762 2018-11-16 15:47:37 +0900

r65760 の appveyor.yml のコメントの変更を再修正。

nobu: r65763 2018-11-16 15:51:57 +0900

ec_set_vm_stack() という関数に rb_ の prefix を追加して rb_ec_set_vm_stack() と改名しています。元々 static はついていませんでした。

nobu: r65764 2018-11-16 15:52:00 +0900

vm_backtrace.c と numeric.c() のいくつかの関数に static 修飾子を追加するのと、uniname2ctype_p() の prototype 宣言を常に行うようにしています。

nobu: r65765 2018-11-16 15:52:01 +0900

ruby.imp...ってなんだっけ? とにかく ruby.imp にオブジェクトファイルのシンボルを出力する時に除外するシンボルに InitVM_ ではじまるものを追加しています。

k0kubun: r65766 2018-11-16 15:52:12 +0900

wercker の除外テストを管理するファイル群を test/excludes/_wercker/test-mjit-wait/ から test/excludes/_wercker/jit-wait/ のように改名しています。

nobu: r65767 2018-11-16 16:08:58 +0900

r65765 の続き。 ruby.imp に MJIT 用に追加で MJIT_FUNC_EXPORTED のついている関数も出力するようにしています。

shyouhei: r65768 2018-11-16 18:04:34 +0900

C言語で double から float にキャストするのは場合によって未定義挙動になるそうなので、pack.c で float の数値を返すところで単にキャストしていたのを VALUE_to_float() という関数を導入して、NaN や Infinity の処理を明示的に定数を返すようにしています。