ruby-trunk-changes r29457 - r29483

今日はたくさんコミットがあります。今日はやることがあってちと忙しいので省エネでどんどん行きますよ。

nobu:r29457 2010-10-12 22:18:21 +0900

fiber_setcontext でマシンスタックの伸びる方向を検出するための変数定義の漏れを修正。またキャスト漏れを修正。

nobu:r29458 2010-10-12 22:41:12 +0900

VALUE 型とすべきところを long にキャストしていた部分を修正。
昔の RHG で学んだ方々は VALUE 型 = long 型で sizeof(long) == sizeof(void*) が rubyコンパイルできる環境の前提と憶えている人もいると思いますが、今はこの前提は崩れているようです。ソースコードにはまだその時代の遺産が残っていてこの後怒涛の修正が来てます。

nobu:r29459 2010-10-12 23:03:24 +0900

gc.c にて rb_jmp_buf を VALUE 型の配列としてアクセスしているところを共用体を使うようにしています。警告除去。

nobu:r29460 2010-10-12 23:09:27 +0900

やはり long と void * のサイズが異なる環境でのキャストの間違いを修正。

nobu:r29461 2010-10-12 23:35:40 +0900

VALUE 型へのキャストを挿入。これだけだと元々 VALUE 型で意味不明なところもあるのですが後のコミットへの布石です。

nobu:r29462 2010-10-12 23:47:23 +0900

CRuby において Hash の実装のベースとなっていて、内部的にも頻繁に利用されている st_table のキーである st_data_t 型は st.h で VALUE 型と同様にポインタと同じサイズになるように定義されています。st_data_t を使うべきところで VALUE 型を使っているところがあったのでそれらを st_data_t 型に修正しています。

nobu:r29463 2010-10-12 23:53:59 +0900

キャスト不備による警告の除去。

nobu:r29464 2010-10-12 23:54:02 +0900

条件コンパイルにより不要な変数の宣言を ifdef の中に入れてます。

nobu:r29465 2010-10-12 23:54:06 +0900

rb_num2long の返り値を格納しておく変数が long だったので SIGNED_VALUE へ変更。

nobu:r29466 2010-10-12 23:55:14 +0900

LLP64 環境でのキャストの間違い修正。

nobu:r29467 2010-10-12 23:58:23 +0900

win32/win32.c にて long を使用していた所でそれぞれ正しい型を使うように修正。

nobu:r29468 2010-10-13 00:03:51 +0900

printf のフォーマット文字列の識別子を正しく使うように修正。

nobu:r29469 2010-10-13 00:10:04 +0900

これもキャスト絡みで警告の除去。

nobu:r29470 2010-10-13 00:18:22 +0900

整数定数のオーバフロー対策。

nobu:r29471 2010-10-13 00:21:20 +0900

syck/rubyext.c で const char * が必要なところで char * だったのを修正したり、関数の引数や返り値の型の間違いを修正。

naruse:r29472 2010-10-13 05:23:53 +0900

missing/strchr.c と missing/strstr.c に strlen のプロトタイプ宣言を追加しています。
なお ChangeLog のファイル名(strstr.c)に typo があります。

naruse:r29473 2010-10-13 05:54:29 +0900

test_io_m17n.rb にてバックスラッシュのエスケープが足りてないのを修正。Ruby のシングルクオートってエスケープが効く(バックスラッシュはエスケープしないといけない)んですよね、sh と違って。

naruse:r29474 2010-10-13 06:04:35 +0900

test_string.rb にて警告除去、ってコミットメッセージにはあるんですが、後半はスキップ(assert文をコメントアウトされてる)テストを丸ごとコメントアウトしていたりしているのですがこのテストは正しくないテストなのでしょうか。

naruse:r29475 2010-10-13 09:27:41 +0900

test_string.rb の修正について、ruby-mode.el に従って整形したらしい。

nobu:r29476 2010-10-13 10:52:54 +0900

ruby_executable_node のプロトタイプ宣言を ruby.h に追加。

nobu:r29477 2010-10-13 11:04:10 +0900

  • debug.c (ruby_set_debug_option): define always for binary

compatibility with debug env enabled binary.

  • signal.c (ruby_enable_coredump): ditto.

usa:r29478 2010-10-13 12:10:49 +0900

thread_win32.c でも昨日の r29450 と同様エラーメッセージは英語で取得するようにしています。

akr:r29479 2010-10-13 12:36:20 +0900

test_m17n_comb.rb から test_m17n.rb にひとつテストケースを移動しています。
あ、久しぶりに akr さんのコミットですね。

naruse:r29480 2010-10-13 12:56:31 +0900

rb_num_to_uint という関数を追加して、VALUE 型の Integer から unsigned int への変換でエラー内容を返すようにしています。型エラー(整数じゃない)、負の数値、オーバフローの3種のエラーがあります。また String#concat で引数が整数の時にこの rb_num_to_uint を使うようにしています。
というか、String#concat で引数に整数(コードポイントを指定)できるんですね! 知りませんでしたよ。

naruse:r29481 2010-10-13 14:58:35 +0900

そして rb_num_to_uint のオーバフローの判定を修正。

shyouhei:r29482 2010-10-13 19:28:25 +0900

引数の型が無駄に void * になっていたので正確な型に修正。

naruse:r29483 2010-10-13 21:13:53 +0900

Integer#chr でも rb_num_to_uint を使って、負の整数では例外が発生するように。

今日はキャストとか整数型のサイズの環境による違いを正しく取り扱うためのコミットがたくさんあったようです。

なお今の trunk には [ruby-dev:42369] でささださんが報告しているように ObjectSpace.each_object で SEGV する不具合があるようで、make test-all が途中でこけてます。trunk 上で生活している方はご注意ください。わたしは make test-all が通らないと make install しないようにしているので回避できました。ささださんはパッチも投稿していて、これで make test-all は直るみたいなので取り込まれるのを待ちます。