今日は UDPSocket#send のメモリリーク修正、AST の NODE の attrset ID 保持についての変更などがありました。
nobu: r52108 2015-10-12 09:08:44 +0900
Float#** の実装で pow(3) の呼び出しと DBL2NUM() の変換の呼び出しを括り出して最後に return するようにリファクタリング。
nobu: r52109 2015-10-12 09:08:58 +0900
numeric.c で "-@", "**", "divmod", "<=", ">=" などの演算子メソッドの ID を rb_intern() して作っていたのを、組込みで定義されているものや Init 関数で取得済みの変数を利用するようにしています。
svn: r52110 2015-10-12 09:09:03 +0900
version.h の日付更新。
nobu: r52111 2015-10-12 09:11:37 +0900
r52097 や r52101 の拡張ライブラリ socket の UDPSocket のメモリリーク修正の続き? で xxxx_internal() 関数内で rb_io_check_closed() でソケットが閉じられてないか再確認するようにしています。 GetOpenFile() も rb_io_check_closed() を含んでいるので、_internal() で再確認するのは別 Thread での変更のためかな、と思ったのですが rb_ensure() は Thread 切り替えなしで関数を呼ぶみたいなので、なんでだろ…。コミットメッセージをみるとむしろチェックを1回きりにしようとしているみたいなので、内容と齟齬があるような気がします。
nobu: r52112 2015-10-12 09:11:54 +0900
拡張ライブラリ socket の UDPSocket#send で rb_ensure() を使って確保した struct rb_addrinfo を例外発生時にも解放するように修正しています。潜在的メモリリークがあったようですね。
nobu: r52113 2015-10-12 11:48:37 +0900
ID の attrset (a= のような等号記号つきの代入っぽいメソッドの ID)に "=" なしの ID にビットフラグを追加した ID を振ったものを NODE に記録する必要がなくなっているということで、コンパイル時の処理を修正しています。
nobu: r52114 2015-10-12 12:03:36 +0900
ruby --dump=parsetree で AST を表示する時に r52113 で attrset ID が NODE に含まれなくなったのに対応しています。
nobu: r52115 2015-10-12 12:26:24 +0900
parse.y のマクロ new_attr_op_assign() の引数が常に ripper_id2sym() を経由していたので、マクロ内に ripper_id2sym() の呼び出しまで埋め込むように変更しています。
nobu: r52116 2015-10-12 12:39:23 +0900
r52114 の再修正。 コマンドラインオプション --dump=parsetree で nd_aid はチェックしないようにしています。また parsetree_with_comment で表示するコメントから reader/writer の表示は消しています。