そういえば 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つの文字を表現する)のペアのひとつしか存在しない時に例外を発生しているようです。
nobu:r29894 2010-11-24 06:37:56 +0900
test/ruby/test_transcode.rb の文字エンコーディングを指定するマジックコメントが Emacs 形式で書かれていて、Emacs には ASCII-8BIT というエンコーディングがない(からエラーになってたんでしょう)ので形式を変更。
デバッグ用に __ENCODING__ を表示しているのが残ってますね。
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_ マクロが定義されている時だけ有効にしています。