ruby-trunk-changes r61889 - r61935

今日はヒアドキュメントの終了トークンがとても長い時の不具合修正や、export するシンボルの追加などがありました。

hsbt: r61889 2018-01-17 22:15:13 +0900

node.c, random.c, thread.c のコメントの typo 修正。

nobu: r61890 2018-01-18 00:28:37 +0900

RubyVM::InstructionSequence#to_ary で ISeq をデコードする時に命令の種類の数として VM_INSTRUCTION_SIZE を参照していましたが、trace あり版となし版で2倍に増えているので、半分のサイズにして insn_syms 配列を確保するようにしています。 VM のメインループの最適化のうち OPT_CALL_THREADED_CODE という手法を使うときだけ iseq_encoded が上書きされるからなんとか…と書いてあるので特定の環境でのみ発生する問題があったのだと思います。

svn: r61891 2018-01-18 00:28:38 +0900

version.h の日付更新。

naruse: r61892 2018-01-18 03:02:47 +0900

Binding#local_variable_set で GC の Write Barrier 関係のテストで時間がかかる環境があるみたいでタイムアウトの秒数を伸ばしています。

naruse: r61893 2018-01-18 03:08:58 +0900

marshal.c に #include "ruby/ruby.h" を "ruby/io.h" の前に明示的にするように追加しています。 AIX でのビルドが壊れてたそうです。

normal: r61894 2018-01-18 09:52:01 +0900

標準添付ライブラリ logger でインスタンス変数 @logdev の nil チェックしてからメソッドを呼んでいたところを &. 演算子を利用するようにしています。 バイトコードの数百バイトを節約するって書かれてるけど、そんなに変わるかな?

nobu: r61895 2018-01-18 10:10:22 +0900

拡張ライブラリ win32 の Win32::Resolv で NT 系かどうかの判定をしていたところで rb_w32_osid() という関数を fiddle を使って呼び出して判定するようにしています。

nobu: r61896 2018-01-18 10:27:45 +0900

r61616 の Sturct.new の keyword_init キーワード引数を使って作ったクラスのインスタンスの Marshal.load の不具合修正で、コンパイラが maybe-uninitialized の警告を出すことがあったみたいで、書きかたを少し変更して警告抑制しています。

nobu: r61897 2018-01-18 11:44:50 +0900

標準添付ライブラリ resolv でも Hash#include? で要素チェックしてメソッドを呼んでいるところを &. 演算子を使うように書き換えています。

nobu: r61898 2018-01-18 12:09:39 +0900

標準添付ライブラリ resolv で Windows 環境で Win32::Resolv.get_hosts_path が nil を返した時に lib/resolv.rb のロード時にエラーが発生してたので、Resolv::Hosts::DefaultFileName に IO::NULL を格納しておいてエラーを防ぐようにしています。 https://github.com/ruby/ruby/pull/1791 [ruby-core:84907] [Bug #14369]

nobu: r61899 2018-01-18 12:25:20 +0900

parse.y の必須キーワード引数の時の assignable() の第3引数の型が ripper 向けと本体向けで NODE* と VALUE で異なっていたのを REQUIRED_KEYWORD というマクロで定義することで ripper 向けで無理矢理 VALUE にキャストしたものを使うのをやめて Qundef を渡すようにしています。これにより assignable() を関数に wrap してキャストするための関数マクロも定義していたのをやめています。

nobu: r61900 2018-01-18 12:29:12 +0900

parse.y でヒアドキュメントのトークンの長さをトークンのバッファの1バイト目に格納しておく仕組みになってたので、トークンが257バイト以上あると位置情報がおかしくなっていたのを修正しています。

nobu: r61901 2018-01-18 12:37:08 +0900

r61899 で parse.y の assignable() という同名の関数の wrapper の関数マクロの定義をやめたので、ripper 向けに #undef しているところも削除しています。

naruse: r61902 2018-01-18 12:53:46 +0900

r61892 で伸ばしたテストのタイムアウトをもう少し伸ばしています。

nobu: r61903 2018-01-18 16:53:26 +0900

eval_intern.h の pass_passed_block_handler() で vm_block_handler_verify() を呼んでいましたが、その次に呼んでる vm_passed_block_handler_set() の中でも呼ばれていたので削っています。

nobu: r61904 2018-01-18 16:59:03 +0900

vm_eval.c の rb_type_str() で switch 文の case をマクロを展開して作るようにしていましたが、エディタのインデントがうまくいかなくなるので、case と最後のセミコロンはマクロの外に出すようにしています。

shyouhei: r61905 2018-01-18 18:44:32 +0900

include/ruby/ruby.h の extern している関数の宣言の順番をソートしなおしています。

shyouhei: r61906 2018-01-18 18:44:32 +0900

include/ruby/ruby.h で rb_cLazy を extern するようにしています。ここからしばらくシンボルの export の追加が続きます。

shyouhei: r61907 2018-01-18 18:44:33 +0900

rb_mWarning と rb_cWarningBuffer の export。

shyouhei: r61908 2018-01-18 18:44:34 +0900

rb_mFConst の export。 File::Constants を格納してる C の変数ですね。

shyouhei: r61909 2018-01-18 18:44:34 +0900

rb_mProcGID, rb_mProcID_Syscall, rb_mProcUID を export しています。

shyouhei: r61910 2018-01-18 18:44:35 +0900

rb_eUndefinedConversionError, rb_eInvalidByteSequenceError, rb_eConverterNotFoundError の export。

shyouhei: r61911 2018-01-18 18:44:36 +0900

error.c, eval.c, process.c, signal.c などのソースファイルでそれぞれ extern していた変数を internal.h の中で extern 宣言するように宣言を移動しています。こういう局所的な extern 宣言けっこうありますよね。

shyouhei: r61912 2018-01-18 18:44:36 +0900

configre.ac でコンパイラの -Wmissing-noreturn オプションがあれば付けるようにしています。 clang 用のオプションみたいです。

shyouhei: r61913 2018-01-18 18:44:37 +0900

compile.c の ibf_dump_object_unsupported() に NORETURN() を使ってこの関数からは return しないことをコンパイラに指示するようにしています。以降 NORETURN() をつける変更がいくつか続きます。

shyouhei: r61914 2018-01-18 18:44:38 +0900

dir.c の dir_closed() を NORETURN() で宣言しています。

shyouhei: r61915 2018-01-18 18:44:39 +0900

marshal.c の long_toobig() を NORETURN() で宣言しています。

shyouhei: r61916 2018-01-18 18:44:39 +0900

numeric.c の num_funcall_op_1_recursion() を NORETURN() で宣言しています。

shyouhei: r61917 2018-01-18 18:44:40 +0900

re.c の rb_reg_raise() を NORETURN() で宣言しています。

shyouhei: r61918 2018-01-18 18:44:41 +0900

re.c の reg_enc_error() を NORETURN() で宣言しています。

shyouhei: r61919 2018-01-18 18:44:41 +0900

re.c の rb_enc_reg_raise() を NORETURN() で宣言しています。

shyouhei: r61920 2018-01-18 18:44:42 +0900

re.c の rb_reg_raise_str() を NORETURN() で宣言しています。

shyouhei: r61921 2018-01-18 18:44:43 +0900

signal.c の sigbus() を NORETURN() で宣言しています。

shyouhei: r61922 2018-01-18 18:44:44 +0900

signal.c の sigsegv() を NORETURN() で宣言しています。

shyouhei: r61923 2018-01-18 18:44:45 +0900

signal.c の ruby_abort() を NORETURN() で宣言しています。

shyouhei: r61924 2018-01-18 18:44:45 +0900

signal.c の sigill() を NORETURN() で宣言しています。

shyouhei: r61925 2018-01-18 18:44:46 +0900

thread.c の rb_threadptr_to_kill() を NORETURN() で宣言しています。

shyouhei: r61926 2018-01-18 18:44:47 +0900

thread_sync.c の raise_closed_queue_error() を NORETURN() で宣言しています。

shyouhei: r61927 2018-01-18 18:44:48 +0900

vm_insnhelper.c の vm_stackoverflow() を NORETURN() で宣言しています。

shyouhei: r61928 2018-01-18 18:44:49 +0900

vm_insnhelper.c の vm_super_outside() を NORETURN() で宣言しています。

shyouhei: r61929 2018-01-18 18:44:50 +0900

vm.c の ruby_vm_collect_usage_func_xxxx() のような関数群を変数として宣言して VM_COLLECT_USAGE_DETAILS というマクロが有効な時は関数ポインタ経由で呼び出すようにしてましたが、この変数群に static 修飾子をつけて宣言するようにしています。

shyouhei: r61930 2018-01-18 18:44:51 +0900

parse.y の rb_parser_lex_state_names という変数に static 修飾子を付加しています。

shyouhei: r61931 2018-01-18 18:44:52 +0900

variable.c の rb_global_tbl という変数にも static 修飾子を付加しています。

nobu: r61932 2018-01-18 20:34:36 +0900

拡張ライブラリ dbm, gdbm, sdbm の closed_dbm(), closed_sdbm(), rb_gdbm_fatal() などの関数に NORETURN() を使って宣言するようにしています。

hsbt: r61933 2018-01-18 20:44:10 +0900

gc.c, regcomp.c, regparse.c, regparse.h の構造体メンバーや static な関数の名前の typo を修正しています。

kazu: r61934 2018-01-18 21:54:18 +0900

Array#push と Array#unshift の rdoc 用コメントにそれぞれ append と prepend という別名も call-seq に追加しています。

kazu: r61935 2018-01-18 21:54:24 +0900

r61883 のリファクタリングで、関数の引数にキャストした変数を渡していたところ、既にキャスト済みの値を変数に格納していたのでそっちを渡すようにリファクタリングしています。