ruby-trunk-changes r45848 - r45863

今日は local_variables の返す Symbol の重複をなくす修正や内部実装の変更、Numeric#step のキーワード引数の処理の修正、OpenSSL::SSL::SSLServer が TCPServer でない Socket を扱えない不具合修正などがありました。

nobu: r45848 2014-05-07 11:00:28 +0900

local_variables に関連する関数の引数/変数名の ary -> vars に改名しています。

svn: r45849 2014-05-07 11:00:35 +0900

version.h の日付更新。

nobu: r45850 2014-05-07 11:25:43 +0900

local_variables でブロックパラメータやダイナミック変数(ブロック内のスコープの変数)で外の変数の shadowing が起きている時に、同じ Symbol が複数回現れるようになっていたのを、1度だけ出現するように変更(修正?)しています。 内部的には Array に追加していたのを Hash のキーに格納して Hash#keys で取り出すようにしています。 [ruby-core:60501] [Bug #9486]
ふーむ、まあ shadowing してたら重複してもいいような気もしなくはないですけどね。 local_variables をどうやって使うのかと考えたら、外のスコープの変数は取り出せないし 1回のほうがいいのかなぁ。

ko1: r45851 2014-05-07 11:57:11 +0900

benchmark/driver.rb に --rawdata-output というオプションを追加して、/proc/cpuinfo (存在すれば) と一緒にそこに指定されたファイルに出力する、とみせかけて pp で標準出力へ! デバッグ用の処理の消し忘れのようです。

ko1: r45852 2014-05-07 12:07:10 +0900

r45851 の benchmark/driver.rb の --output-rawdata の出力先を指定されたファイルに変更しています。 inspect で文字列化して出力しています。

nobu: r45853 2014-05-07 13:26:44 +0900

r45850 の local_variables に重複した Symbol が含まれないようにする修正で中間データに Hash を使うようにしましたが、最後に keys で配列を取り出した後で rb_hash_clear() で利用した Hash を空にしておくようにしています。

nobu: r45854 2014-05-07 13:26:49 +0900

local_variables で変数名を取得する時に文字列化できるかチェックする処理を local_var_list_add() として切り出しています。また中間データの Hash オブジェクトの VALUE を struct local_var_list という構造体にラップしています。これはなぜでしょう。 VALUE で渡してもいいような気がしますが。

nobu: r45855 2014-05-07 13:26:51 +0900

local_variables の中間データに使う Hash の st_table を st_init_numtable() で作るようにして、追加時も st_update() を直接呼ぶようにしています。

nobu: r45856 2014-05-07 13:26:53 +0900

rb_hash_keys() を static 関数だったのを外して internal.h にプロトタイプ宣言するようにしています。これも local_variables 関連で直接呼ぶためでしょうね。

nobu: r45857 2014-05-07 13:26:55 +0900

というわけで r45856 で static を外した rb_hash_keys() を local_variables の中間データの Hash の keys を取得するために直接呼ぶように変更しています。また中間データの Hash の klass をクリアして Ruby スクリプトから見えないようにしています。

nobu: r45858 2014-05-07 16:34:33 +0900

numeric.c のインデント修正のみ。

nobu: r45859 2014-05-07 17:05:00 +0900

numeric.c の Numeric#step のキーワード引数等の解釈のための関数マクロ NUM_STEP_SCAN_ARGS() を static 関数 num_step_scan_args() に変更しています。

nobu: r45860 2014-05-07 17:10:00 +0900

r45859 でマクロから関数に変更した num_step_scan_args() で結果を出力するためのポインタ渡しの変数への格納がマクロの時のままで、参照先に格納できていなかったのを修正しています。

nobu: r45861 2014-05-07 17:24:09 +0900

Numeric#step でキーワード引数のチェックがただキーワード引数があるかどうかだけで分岐していて、必要なキーワード引数があるか、不要なキーワード引数がないかチェックされていなかった不具合を修正しています。また通常引数の指定とキーワード引数の指定が重複していないかもチェックしています。 r45858, r45859, r45860 はこの布石でしたか。 [ruby-dev:48177] [Bug #9811]

akr: r45862 2014-05-07 21:22:02 +0900

openssl のテスト test/openssl/test_pair.rb で TCPSocket の両端を作成する処理を test_connect_accept_nonblock から tcp_pair というメソッドに抽出しています。

akr: r45863 2014-05-07 21:48:27 +0900

拡張ライブラリ openssl の OpenSSL::SSL::SSLServer#accept で @svr の accept を呼ぶ時に TCPServer なら TCPSocket が戻り値なのですが、Socket#accept は [socket, addrinfo] と配列で返すのでどちらでも socket のみ受け取るように修正しています。Addrinfo#connect や Addrinfo#listen で Socket オブジェクトを作ってそれを OpenSSL::SSL::SSLServer に渡すような使いかたもできるようにしています。 [ruby-core:62064] [Bug #9750]