ruby-trunk-changes r34989 - r34999

今日は WeakRef を安全に実装するための ObjectSpace::WeakMap の追加、キーワードrest引数の文法の漏れを追加、リファクタリング(?)、IO#set_encoding の不具合修正などがありました。

shugo:r34989 2012-03-13 00:12:07 +0900

Enumerable#lazy の rdoc にサンプルコードを追記しています。1から無限に続く整数のリストから長辺が100未満の辺の長さが整数の直角三角形を取り出すコードを書いています。

svn:r34990 2012-03-13 00:12:14 +0900

version.h の日付更新。

naruse:r34991 2012-03-13 00:17:27 +0900

test/ruby/test_io_m17n.rb に警告メッセージをチェックする assert_warning を定義して assert_warn に代わりこれを使うようにしています。あと test/ruby/test_m17n_comb.rb からはテストを削除しています。こっちは消したままでいいのでしょうか? また test/ruby/test_m17n_comb.rb で未使用だった assert メソッド類を削除しています。

nobu:r34992 2012-03-13 10:59:50 +0900

ruby のビルドプロセスでは make を実行した時に configure.in が更新されていたりすると再度 configure してから make し直すしくみがあるのですが、version.h と include/ruby/version.h が更新されていた時も再configure するように依存関係を追加しています。

nobu:r34993 2012-03-13 10:59:54 +0900

tool/rbinstall.rb で CONFIG に bindir, libdir などインストール先のディレクトリや LIBRUBY_SO, LIBRUBY などライブラリ名などが未定義だったらエラーにするようにしています。 また prepare で basedir 引数が nil だったら処理をスキップするようにしています。 configure に --with-sitedir=no や --with-vendordir=no を指定した時にインストールが失敗してしまうのを修正しています。 [ruby-core:39135] [Bug #5238]

nobu:r34994 2012-03-13 12:34:11 +0900

test/ruby/envutil.rb で定義されている test_warn の引数を拡張してエラーメッセージを受け取れるようにし、また r34991 で定義した test_warning も envutil.rb に移動してどこからでも利用できるようにしています。

nobu:r34995 2012-03-13 12:37:06 +0900

ObjectSpace::WeakMap というクラスを追加して、weakref.rb で ObjectSpace._id2ref を使って object_id で参照を管理するのをやめて ObjectSpace::WeakMap で弱参照テーブルを finalizer の実行を認識できるように C で実装したものを利用するようにしています。 [ruby-dev:44565] [Bug #5350]

naruse:r34996 2012-03-13 13:03:03 +0900

test/ruby/envutil.rb の assert_warn で渡したメッセージを assert_warn が生成するメッセージのかわりにまるまるおきかえるのではなくてそこに追加するようにしています。

naruse:r34997 2012-03-13 13:03:06 +0900

IO#set_encoding で external と internal のエンコーディングが同じ時の警告メッセージが "utf-8:utf-8" のように ":" 区切りの文字列の指定だと出るのに2つの引数で渡すと警告が出ないので、常に警告するようにしています。 [ruby-core:40727] [Bug #5568]

nobu:r34998 2012-03-13 15:17:08 +0900

キーワードrest 引数(** を前置した引数)のみのメソッド定義が文法エラーになっていたので文法ルールを追加しています。 [ruby-core:42455] [Bug #5989]

nobu:r34999 2012-03-13 22:00:17 +0900

さらに AST を命令列(ISeq)にコンパイルする時にキーワード rest 引数だけの時の処理が足りていないのを追加。さらに parse.y でキーワード引数関係の NODE の作りかたを変更しているようなのですが、これは読み切れませんでした。