ruby-trunk-changes r56299 - r56320

今日は flip-flop や Range のリテラルコンパイル時の処理の変更や拡張ライブラリ date のリファクタリング、String#hash の不具合修正などがありました。

nobu: r56299 2016-09-30 21:46:53 +0900

flip-flop のテストに基本的な使いかた(なのかな)のテストケースを追加しています。

usa: r56310 2016-10-01 02:03:48 +0900

win32/win32.c の poll_child_status() で子プロセスが終了している時に rb_w32_wait_events_blocking() を呼んでステータスを取得するのに失敗した場合の goto の飛び先のラベルを移動しています。 errno の設定の処理の前に飛んでいましたが、rb_w32_wait_events_blocking() でも errno をセットしているのでそこはスキップするように修正しています。

svn: r56311 2016-10-01 02:03:49 +0900

version.h の日付更新。

nobu: r56312 2016-10-01 17:52:42 +0900

拡張ライブラリ date の date_zone_to_diff() で余分なオブジェクト確保を避けるリファクタリング

nobu: r56313 2016-10-01 17:52:43 +0900

拡張ライブラリ date の zonetab.h を生成するための gperf コマンドに -P オプションを追加しています。共有ライブラリに含めるために初期化を最適化するそうですが、zonetab() 関数で文字列比較に strcmp() のかわりに strncmp() を使うようになっています。

nobu: r56314 2016-10-01 18:00:05 +0900

拡張ライブラリ date の最適化。文字列の末尾のマッチを判定しているところを str_end_with() という関数に切り出しています。

nobu: r56315 2016-10-01 19:19:36 +0900

compile.c で flip-flop 演算子コンパイルを compile_flip_flop() という関数に切り出して、より短い命令列で実現するように最適化しています。

nobu: r56316 2016-10-01 22:17:51 +0900

Range オブジェクトを生成する a..b a...b のようなリテラルは parse.y で一旦 AST にしたあとで後処理で fixup_nodes() という関数で Range オブジェクトが生成されるように遅延されていたのですが、これをやめてさらに compile.c で ISeq へコンパイル時に Range オブジェクトを生成するようにしています。

usa: r56317 2016-10-01 23:12:34 +0900

r56312 の date のリファクタリングで date_zone_to_diff() の変数を unsigned long にしていましたが、負値が入ることもあってテストを失敗させてたようなので long にしています。

usa: r56318 2016-10-02 02:04:04 +0900

ポインタのサイズが long long と同じ環境で rb_fix2str() の引数の Fixnum が 32bit に収まっていないのをチェックして rb_bug() を呼び出すようにしています。

svn: r56319 2016-10-02 02:04:05 +0900

version.h の日付更新。

usa: r56320 2016-10-02 02:06:21 +0900

String#hash で st_index_t の値を INT2FIX() で変換していましたが Fixnum に収まるとはかぎらないので ULONG2NUM() もしくは ULL2NUM() を使って Integer に変換するようにしています。