ruby-trunk-changes r66760 - r66776

今日は Module#instance_methods の不具合修正や StringIO#ungetbyte の挙動変更、ブロックを渡さない proc メソッド呼び出しの警告追加や、コンパイラの C99 の規格を利用するようにする変更などがありました。

kazu: r66760 2019-01-09 21:55:20 +0900

r65802 で IO#ungetbyte が 256以上の数値を弾くようにしたのに合わせて StringIO#ungetbyte も同じ挙動するようにしています。 [Bug #14359]

svn: r66761 2019-01-09 21:55:21 +0900

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

nobu: r66762 2019-01-09 22:58:49 +0900

関数定義や for 文のブロックのかっこの位置などスタイルの修正。

nobu: r66763 2019-01-09 22:58:51 +0900

Time.new で offset の指定が不正な時の例外メッセージに受付けるようになった文字列のぶんを追加する追随。

nobu: r66764 2019-01-09 23:04:21 +0900

Module#instance_method に false を渡した時にそのクラスに特異クラス(singleton class)が作られていると結果が空になってしまうことがある不具合修正。引数に false 指定する継承元の親クラスや include している Module のメソッドをみないのですが、singleton class がはさまってるとそこで探索を打ち切ってしまうので本体のメソッドが追加されていませんでした。てことはたぶん Module#prepend した時もだったのかな。 [ruby-core:90872] [Bug #15501]

ko1: r66765 2019-01-10 04:11:32 +0900

hash.c に hash_iter_lev_inc() と hash_iter_lev_dec() という static 関数を追加して、かわりに struct RHash::iter_lev の方に const をつけて関数経由でないと変更しないようにしています。

svn: r66766 2019-01-10 04:11:35 +0900

version.h の日付更新。

tenderlove: r66767 2019-01-10 08:04:00 +0900

2.6 から追加した Array, Hash リテラル用の VM 命令 duparray, duphash の実装に DTrace のオブジェクト生成のフックを追加しています。 [ruby-core:90418] [Bug #15399]

nobu: r66768 2019-01-10 09:36:28 +0900

addr2line.c のスタイル修正と、for 文の条件部で変数宣言していたのが古いコンパイラで対応できないので関数先頭で宣言するように修正しています。 [ruby-core:90949] [Bug #15519]

nobu: r66769 2019-01-10 15:01:32 +0900

2.6 から追加された Proc オブジェクトを合成する Proc#<< や Proc#>> で引数が Proc, Method やその他 call メソッドを呼べるオブジェクトであることを確認するようにしています。 [ruby-core:90591] [Bug #15428]

k0kubun: r66770 2019-01-10 16:59:18 +0900

.travis.yml の build matrix の pedanticism というコンパイラの互換性や警告を厳しくチェックするやつで C99 の機能を許容するようにオプションの -ansi を -std=c99 に変更したり、一部 -Werror= を消したりしています。

k0kubun: r66771 2019-01-10 17:04:35 +0900

r66605 で C99 を利用するように configure.ac で AC_PROG_CC を AC_PROG_CC99 に変更したので、追随して -WWerror=declaration-after-statement と -Werror=restrict を追加しないようにしています。 CRuby のソースコードで利用する C の規格を C99 に引き上げ(?)ようという提案があったんですね。 https://github.com/ruby/ruby/pull/2064 [ruby-core:90089] [Misc #15347]

nobu: r66772 2019-01-10 17:19:14 +0900

Kernel#proc などのメソッドは通常ブロックを渡して、そのブロックを Proc オブジェクト化するのですが、実はブロックを渡さずに呼ぶこともできて、その場合は proc が呼ばれたメソッドへ渡されたブロックをそのまま渡すという仕様があります。
つまり

def m
  proc
end

def m(&b)
  proc(&b)
end

とほぼ同じ意味になります。
なんですが、これは意図しないミスを遮蔽した時にわかりにくいので? 警告を出すようにして、標準添付ライブラリでこの挙動を利用していたところを書き直しています。
確かにこの仕様で特に嬉しいってことはあんまりないですよね今は。

k0kubun: r66773 2019-01-10 17:22:23 +0900

NEWS ファイルに C99 のコンパイラをサポート対象にすることと、具体的に採用する記法などを記載したドキュメントへのリンクを追記しています。enum の tailing comma とか変数宣言の位置の緩和とか嬉しいですねー。これまではなにか変更した後にその点だけ修正したりしてたので。 https://bugs.ruby-lang.org/projects/ruby-trunk/wiki/C99 [ruby-core:90089] [Misc #15347]

kazu: r66774 2019-01-10 21:41:06 +0900

r66769 で変更した Proc#<< のテストで、合成時点で例外が発生するようになったので通らなくなった call メソッドの呼び出しは不要なので消しています。

k0kubun: r66775 2019-01-10 22:21:58 +0900

MJIT 関係のソースで定数マクロ TRUE/FALSE をそれぞれ true/false に変更して、bool 型を利用するようにしています。

k0kubun: r66776 2019-01-10 22:29:29 +0900

r66775 の CI でエラーになったそうなので一旦 revert しています。