ruby-trunk-changes r29885 - r29900

そういえば ruby-dev などの ML のアーカイブを提供してくださっているいわゆる blade が先日から復旧した模様です。これで ML へのリンクがちゃんと飛べるようになるのでよかったよかった。
さて今日はちょっと特殊な状況下で SEGV する不具合の修正と UTF-16, UTF-32 というダミーエンコーディングの追加が主なところです。「プログラマのための文字コード入門」を読んでおいてよかったと思いました。

nobu:r29885 2010-11-23 18:54:07 +0900

コントロールフレーム上のメンバのマーク漏れで GC で回収されて SEGV してしまう不具合を修正。バイトコード(ISeq)へのコンパイルオプション tailcall_optimization を有効にした時に発覚。

nobu:r29886 2010-11-23 21:59:50 +0900

win32/win32.c で複雑な関数ポインタのキャストの書式を避けるために typedef で型を定義しておくようにしています。

tadf:r29887 2010-11-23 23:28:55 +0900

complex.c と rational.c のドキュメントの小さな変更のみ。

tadf:r29888 2010-11-23 23:36:37 +0900

safe.c, dln_find.c のファイル先頭に書いてあるファイル名が間違ってたのを修正。

naruse:r29889 2010-11-24 01:42:47 +0900

UTF-16, UTF-32 というダミーエンコーディングを追加して、UTF-16 から UTF-8 への変換を追加しています。
UTF-16, UTF-32 にはバイトオーダーの指定によりバイト列への符号化の順番が違い、文字列の先頭に BOM というヘッダみたいなものをつけてそれを指定しますが、Ruby では BOM はなしにしてエンコーディングで UTF-16LE, UTF-16BE のようにバイトオーダーも含めて指定するようにしていますが、その指定なしのエンコーディングを新設しています。変換すると BOM つきの文字列になるようです。どっちのバイトオーダーになるのかは CPU アーキテクチャによるのかなと思ったらXeonサーバ上でビックエンディアンになったので違うみたいです。

svn:r29890 2010-11-24 01:42:48 +0900

version.h の日付更新。

naruse:r29891 2010-11-24 03:23:03 +0900

UTF-16 から UTF-8 への変換でサロゲートペア(通常使用しない範囲の 2つのコードポイントをあわせて 1つの文字を表現する)のペアのひとつしか存在しない時に例外を発生しているようです。

naruse:r29892 2010-11-24 05:49:56 +0900

UTF-16(バイトオーダー指定なし、BOM つき)から UTF-8 へ変換を追加。

nobu:r29893 2010-11-24 06:13:35 +0900

Windows の「ワイド文字列」と「マルチバイト文字列」の間の変換処理のリファクタリング

nobu:r29894 2010-11-24 06:37:56 +0900

test/ruby/test_transcode.rb の文字エンコーディングを指定するマジックコメントが Emacs 形式で書かれていて、Emacs には ASCII-8BIT というエンコーディングがない(からエラーになってたんでしょう)ので形式を変更。
デバッグ用に __ENCODING__ を表示しているのが残ってますね。

naruse:r29895 2010-11-24 09:08:04 +0900

UTF-32(エンディアン指定なし、BOM つき文字列) と UTF-8 の間のエンコーディング変換も追加。

naruse:r29896 2010-11-24 11:20:11 +0900

String#inspect で UTF-16, UTF-32 を BOM に応じて UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE として扱うようにしています。"\u00FE\u00FF" とBOM が先頭につく以外は余分な "\u0000" が混ざらないようにしています。

usa:r29897 2010-11-24 12:50:03 +0900

BSD_vfprintf (MRIソースコードで利用している snprintf の実装)で Windows プラットフォーム上では VC++ での指示子 "I", "I32", "I64" のサポートを追加しています。

usa:r29900 2010-11-24 15:18:43 +0900

r29899 で追加した "I64" の指示文字は _HAVE_SANE_QUAD_ マクロが定義されている時だけ有効にしています。