ruby-trunk-changes r29443 - r29456

どうも喉が痛いなと思っていたら、今度は鼻風邪をひいてしまったようです。季節の変わり目は気をつけないといけません。今年の気温変化は特別厳しかったですけど。では今日のコミットです。

nobu:r29443 2010-10-12 10:39:11 +0900

x86_64 を x64 に置き換えるのは mingw32 の時だけと条件を絞り込んでいます。

usa:r29444 2010-10-12 12:22:13 +0900

先日入った Windows でのバックトレース出力機能で SymGetModuleBase64 の返り値を 32ビットにしていたので 64ビットに修正。

naruse:r29445 2010-10-12 14:14:23 +0900

Integer#chr で数値の文字に変換する処理で codepoint を unsigned の 32bit 整数で表現するようにしています。GB18030 という文字コードでは 32bit の MSB まで使うようです。

naruse:r29446 2010-10-12 15:18:08 +0900

int_chr をリファクタリングして rb_enc_uint_chr という関数を切り出しています。

naruse:r29447 2010-10-12 15:18:11 +0900

IO#putc でマルチバイト文字をサポートしています。
[ruby-core:30697]

naruse:r29448 2010-10-12 15:37:27 +0900

IO#ungetc でもマルチバイト文字をサポートしています。
が、ここでの Bignum の扱いを条件コンパイルしているところに問題があり後に再修正されています。

usa:r29449 2010-10-12 15:54:52 +0900

すぐ後の 29450 と合わせて Errno::EXXX の message が正しく設定されないことを対処しています。このコミットでは Windows(というか VC10?)で errno の値にずれがあるのを吸収しています。[ruby-dev:42355].

usa:r29450 2010-10-12 16:05:56 +0900

こちらは Errno::EXXX の message のエンコードが正しく設定されないことへの対処で、英語のエラーメッセージを取得することで対処しているようです。コミットログに [experimental] とあるのでまた変更されるのかもしれません。[ruby-dev:42358]

naruse:r29451 2010-10-12 17:50:30 +0900

Integer#chr で変数の型の変更により不要になった条件文を削除したり、不正確な変数の型だった部分を修正したりしています。

naruse:r29452 2010-10-12 17:56:00 +0900

すぐ上の r29451 で導入した long 型の MSB の mask である MSBMASK を VALUE 型の MSB の mask として VALUE_MSBMASK に定義しなおし。

naruse:r29453 2010-10-12 18:25:33 +0900

String#concat で文字のコードポイントを取る変数に VALUE(long) を使っていたところを unsigned int に変更。 これも GB18030 のために。

naruse:r29454 2010-10-12 18:30:42 +0900

r29448 で IO#ungetc で Bignum の扱いを条件コンパイルしていたのをやめています。[ruby-dev:42366]

naruse:r29455 2010-10-12 19:09:31 +0900

SystemCallError のメッセージが引数から与えられていて、それが tainted だった時に例外オブジェクトに格納される message の文字列も taint するようにしています。

naruse:r29456 2010-10-12 21:39:22 +0900

そして、taint する時には OBJ_INFECT マクロを使用するように error.c で徹底しています。