ruby-trunk-changes r66038 - r66072

今日は主に Windows 版の Fiber の coroutine 実装の32bit/64bit 版のビルドの修正や regparse.c のリファクタリングなどがありました。

nobu: r66038 2018-11-27 22:47:49 +0900

misc/ruby-style.el でスタイルを有効にする条件として作業中のリポジトリ(svn や git)のリモートが rubyリポジトリだったら有効にするというのを入れています。

eregon: r66039 2018-11-28 05:38:20 +0900

ruby/mspec を upstream の最新版に更新。

svn: r66040 2018-11-28 05:38:21 +0900

version.h の日付更新。

eregon: r66041 2018-11-28 05:38:57 +0900

ruby/spec を upstream の最新版に更新。

duerst: r66042 2018-11-28 06:00:06 +0900

r66033 で regparse.c に導入した create_sequence_node() で途中でエラーが発生した時にメモリリークしていたのを修正しています。

duerst: r66043 2018-11-28 06:12:29 +0900

regparse.c の node_extended_grapheme_cluster() からさらに r66033 で導入した create_sequence_node() を使うようにリファクタリングしています。

svn: r66044 2018-11-28 06:12:31 +0900

r66043 の行末の空白除去。

duerst: r66045 2018-11-28 06:23:11 +0900

r66043 で create_sequence_node() の戻り値のエラーチェックをしていなかったのを修正しています。

duerst: r66046 2018-11-28 06:38:53 +0900

r66043 と同様に regparse.c の node_extended_grapheme_cluster() から create_sequence_node() を使うようにするリファクタリング

svn: r66047 2018-11-28 06:38:55 +0900

r66046 の行末の空白除去。

duerst: r66048 2018-11-28 06:50:27 +0900

node_extended_grapheme_cluster() で複数の property node のリストを作る時に Grapheme_Cluster_Break={L,VL,V,T} の順番を変更しています。よくわかりませんがハングルの文字の順番についてらしい。

normal: r66049 2018-11-28 07:20:45 +0900

io.c の内部的に使う構造体 struct copy_stream_struct のメンバーの順序に入れ替えと close_src、close_dst のフラグに bit field を使うようにして構造体サイズ節約しています。久しぶりの構造体ダイエットだ。

normal: r66050 2018-11-28 07:48:07 +0900

enumerator.c の Enumerable#chain の実装で call の ID を毎回 rb_intern() してたのを事前に用意されている id_call を参照するように修正しています。

kazu: r66051 2018-11-28 08:57:55 +0900

Enumerator::Chain#size の rdoc 用コメントで戻り値に Float::INFINITY や nil がかえる可能性もあることを追記。

duerst: r66052 2018-11-28 09:28:52 +0900

r66031 のリファクタリングで導入した regparse.c の quantify_property_node() の最後の2つの引数 lower, upper を 1つの文字(char)にまとめるようにしています。正規表現のメタキャラクタで表現するので呼び元で読みやすくなるというわけですね。

normal: r66053 2018-11-28 09:35:22 +0900

IO.copy_stream の実装の nogvl_copy_file_range() と nogvl_copy_stream_sendfile() で struct stat を送受信の2つぶん宣言していたのを、1つの変数にして使いまわすようにしています。マシンスタック消費を抑えるためとのこと。えーそこまでするか。しかしコミットログによると 144 bytes のスタック節約になるそうで、struct stat って大きいんだな……。

svn: r66054 2018-11-28 09:35:27 +0900

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

hsbt: r66055 2018-11-28 09:48:21 +0900

lib/e2mmap.gemspec の余分な空行削除。

shyouhei: r66056 2018-11-28 09:49:24 +0900

.travis.yml で省略できる時は文字列のクオートを省略するようにしています。

duerst: r66057 2018-11-28 09:53:35 +0900

regparse.c の node_extended_grapheme_cluster() でヘルパー関数を呼んだ後のエラー処理(goto err)を R_ERR() というマクロにまとめるリファクタリング

nobu: r66058 2018-11-28 10:04:38 +0900

win32/Makefile.sub で .asm ファイルから .obj へのコンパイル時のコマンドラインオプションに $(ASFLAGS) を追加するようにしています。

nobu: r66059 2018-11-28 10:04:39 +0900

coroutine/win32/Context.asm で .model flat の前に .386 というモードを指定する directive を追加しています。 また win32/Makefile.sub のこの coroutine 配下の .asm ファイルのルールの書きかたが .obj のほうのディレクトリが限定されてなかったので 64bit 版で上書きされてたそうで記法を修正しています。あーそうなるんだ。

normal: r66060 2018-11-28 10:10:40 +0900

スタック領域ケチるシリーズの続きで rb_update_max_fd() でも fcntl(3) の F_GETFL で代用可能なら struct stat を使わないようにしています。すごい執念だ。けどここは fstat() である必要あんまりないし頻繁に呼ばれそうなので(とはいえここからさらに深く呼び出しが続くような場所でもないのではたしてどのくらい現実の効果があるんだろう)。

shugo: r66061 2018-11-28 10:51:44 +0900

標準添付ライブラリ monitor で Thread.handle_interrupt を利用して割り込み制御することで race condition 修正しています。 [ruby-core:88502] [Bug #14998]

k0kubun: r66062 2018-11-28 10:53:46 +0900

rubyspec の Refinements のテストで MinGW で動かないものがあるので一時的に platform_is_not で除外するようにしています。

duerst: r66063 2018-11-28 10:58:35 +0900

regparse.c の node_extended_grapheme_cluster() でさらのもうひとつ create_sequence_node() を呼ぶようにリファクタリングしています。

hsbt: r66064 2018-11-28 11:38:29 +0900

拡張ライブラリ stringio の gemspec を更新しています。 signed gem 作るようになってたけどやめています。

hsbt: r66065 2018-11-28 12:08:14 +0900

rubygems に upstream から最新版をマージ。

hsbt: r66066 2018-11-28 12:10:09 +0900

rubygems の更新に伴なって bin/ サブディレクトリ化の binstub ファイルを再生成しています。

normal: r66067 2018-11-28 13:31:42 +0900

r66008 の TracePoint#enable のキーワード引数 target_line 追加時のテストで行番号にファイル内の生の行番号が使われてて、ファイルの上のほうを編集するとテストが壊れる恐れがあったので __LINE__ で行番号を取り出してそこからの相対的な位置で assertion を指定するようにリファクタリングしています。おー気がつかなかった。よく見てるなぁ。

nobu: r66068 2018-11-28 15:12:57 +0900

lib/optparse.rb のコメントの末尾になぜか \ があったのを削っています。 ruby-mode.el で誤判定したので気がついたとのこと。

nobu: r66069 2018-11-28 15:12:58 +0900

標準添付ライブラリ optparse の OptionParser::Switch.new の省略可能引数 block のデフォルト値にブロックのない Proc.new が使われていたのをやめるようにしています。ブロックなしの Proc.new はそれが実行されるメソッドに渡されたブロック(つまりここでは OptionParser::Switch.new がブロック付きで呼ばれたらそのブロック)がかわりに使われます。ブロック引数を追加して、互換性のために今の省略可能引数としての block は残しつつ省略されたらブロック引数で受け取ったブロックを代入するようにしています。

duerst: r66070 2018-11-28 15:21:52 +0900

regparse.c の node_extended_grapheme_cluster() でさらに 4箇所 create_sequence_node() を使うようにリファクタリングしています。

duerst: r66071 2018-11-28 15:43:57 +0900

node_extended_grapheme_cluster() でわざわざ小さなコードブロックを導入して変数を定義していたところが2行になったので単に関数の引数に前の関数呼び出しをそのまま書くようにリファクタリングしています。

duerst: r66072 2018-11-28 16:07:59 +0900

node_extended_grapheme_cluster() で create_sequence_node() を使うことで未使用になった np2, np3 という変数を削除しています。ということはこれでリファクタリングシリーズも一段落かな。