ruby-trunk-changes r30459 - r30475

tenderlove:r30459 2011-01-06 02:57:38 +0900

Psych による nilYAML表現を、!!null から YAML 1.0 の標準の(?)表現に変更しています。具体例はテストケースより

>> Psych.dump nil
=> "--- \n...\n"
>> Psych.dump([nil])
=> "---\n- \n"

svn:r30460 2011-01-06 02:57:40 +0900

version.h の日付更新。

nobu:r30462 2011-01-06 04:52:51 +0900

vm.c のインデント修正のみです。

nobu:r30463 2011-01-06 04:54:27 +0900

test/psych/test_nil.rb のプロパティ変更のみです。

nobu:r30464 2011-01-06 05:03:28 +0900

拡張ライブラリをロードする時にエントリポイントとして呼ぶ Init_xxx() 関数の xxx の部分をファイルパスの最後のピリオド(".")まで(拡張子を取り除いたもの)にしていたけど、ピリオドが複数あるファイル名だと関数名にピリオドが含まれてしまうため、最初のピリオドまでで呼び出す Init_xxx() 関数名を決めるように修正。[ruby-dev:41774]

nobu:r30465 2011-01-06 05:10:59 +0900

拡張ライブラリから利用できる Array のサイズを変更する関数 rb_ary_resize を追加しています。[ruby-dev:42912]

nobu:r30466 2011-01-06 05:12:50 +0900

r30465 の ChangeLog のエントリを追記。

nobu:r30467 2011-01-06 05:14:43 +0900

StringIO を freeze したら新規に書き込みや reopen できないように修正されています。[ruby-core:33648] 実装は freeze のチェックだけでなく taint フラグのチェックも行なうようにされています。

nobu:r30468 2011-01-06 05:16:32 +0900

enc/ サブディレクトリの下のいくつかのコードに型キャストを追加して警告除去しています。

nobu:r30469 2011-01-06 05:17:36 +0900

random.c で変数の初期化を追加して警告除去。実際には関数にポインタを渡して格納させているので警告を消すだけで動作には問題はなかったはずです。

nobu:r30470 2011-01-06 05:25:50 +0900

rb_ary_modify() を array.c 以外からも呼べるように export しています。

nobu:r30471 2011-01-06 05:47:01 +0900

r30465 で追加したテスト用拡張ライブラリで Array に追加するメソッド名を resize から __resize__ に変更しています。

tenderlove:r30472 2011-01-06 09:18:16 +0900

r30438 で入った mkmf.rb で RbConfig["warnflags"] から、標準添付でない拡張ライブラリのビルド時には -Werror= を消すという修正で、オプションが複数あった時に間の空白が消えてしまうのを修正しています。
しかし部分マッチの後方参照をしているのに (?:) を使っているのがまずいので、多分こうでいいんじゃないかと思います。

-    warnflags = warnflags.gsub(/(?:\A|\s)-Werror=/, '\1-W')
+    warnflags = warnflags.gsub(/(\A|\s)-Werror=/, '\1-W')

ああこういうのは GitHub で fork してコミット作っておけばいいんですかね。とりあえずブランチ作って push してみました。
https://github.com/nagachika/ruby/commit/55748999554de1466043277855e5d6eb51fe99c4

tenderlove:r30473 2011-01-06 09:24:45 +0900

Net::BufferedIO という IO を wrap するクラスで #eof? メソッドをバイパスするようにしています。

tenderlove:r30474 2011-01-06 09:39:50 +0900

Net::HTTP のテスト test/net/http/test_http.rb で require に File.expand_path を使って絶対パスを渡すかわりに require_relative を利用するようにしています。

tenderlove:r30475 2011-01-06 11:29:18 +0900

Psych.to_json で配列はハッシュなど JSON で表現できるもの以外の普通のオブジェクトを !ruby/object のタグつきで表現するのをやめてただの空の Hash としてエンコードするようにしています。Regexp は !ruby/regexp のタグ付き表現のままみたいですがこれはどうでしょうか。
あと Range は Hash を使った表現に変換されるんですね。

>> Psych.to_json(0..3)
=> "{'begin': 0, 'end': 3, 'excl': false}\n"

それから、JSON では文字列はダブルクオートで囲むはずなのですが Psych.to_json はシングルクオートで囲んでいるため、以下がエラーになります。これはバグ?チケット作ったほうがいいでしょうか。

>> JSON.parse(Psych.to_json(["hoge"]))
JSON::ParserError: 706: unexpected token at ''hoge']
'

[追記]一応チケット作成しました。 http://redmine.ruby-lang.org/issues/show/4244 しかし Psych は YAML のためのライブラリだし、ドキュメントもみあたらず、どういう位置付けのものなのかいまいちわからないのでよけいなお世話だったかも。[/追記]