From: Masao Mutoh Date: 2005-02-25T00:47:37+09:00 Subject: [ruby-dev:25764] Anonymous class This is a multi-part message in MIME format. --Multipart=_Fri__25_Feb_2005_00_47_24_+0900_H1gKe1awt96P=EEE Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit むとうです。 最近、特異クラスの実装が変わったように 見受けられます。そのため、特異クラスを用いた Ruby-GNOME2のプログラムが動作しなくなりました。 再現させるために、 添付のテスト用拡張ライブラリを作成しました。 ご確認ください。 実行結果は以下です。 [mutoh@linux test]ruby -v test.rb ruby 1.9.0 (2005-02-23) [i686-linux] VALUE test = 3086792808 class, superclass foo: 3086792808 < 3086863648 anon class, class foo: 3086792688 < 3086792788 [mutoh@linux test]ruby -v test.rb ruby 1.8.2 (2004-12-25) [i686-linux] VALUE test = 3086794068 class, superclass foo: 3086794068 < 3086863648 anon class, class foo: 3086793948 < 3086794068 Ruby-GNOME2ではクラス(VALUE)とgtype(GTK+のクラスID) を変換させるテーブルを持っていて、自分自身がgtypeを 持たない場合はそのsuperclassのgtypeが無いかLookupして いくような処理をしています。 以前(ruby 1.8.2 (2004-12-25))は、特異クラスの スーパークラスのVALUEポインタ値(3086794068)は そのクラスのポインタ値と等しい(3086794068)ため、 上記のような処理が成り立っていたのですが、 最近の(ruby 1.9.0 (2005-02-23))は、特異クラスの スーパークラスのVALUEポインタ値(3086792788)は そのクラスのポインタ値(3086792808)より、20少ない ため、Lookupに失敗するようになってしまいました。 #必ず20違うようです。 これは意図した変更でしょうか? 意図した変更である場合、特異クラスのスーパークラス のポインタ値から20足したものがオリジナルのクラスの ポインタ値、という処理は正しいでしょうか? あるいは、CLASS_OFの使い方がおかしいよ、とか...。 -- .:% Masao Mutoh --Multipart=_Fri__25_Feb_2005_00_47_24_+0900_H1gKe1awt96P=EEE Content-Type: application/octet-stream; name="extconf.rb" Content-Disposition: attachment; filename="extconf.rb" Content-Transfer-Encoding: base64 cmVxdWlyZSAnbWttZicKCmNyZWF0ZV9tYWtlZmlsZSAndGVzdCcKCg== --Multipart=_Fri__25_Feb_2005_00_47_24_+0900_H1gKe1awt96P=EEE Content-Type: application/octet-stream; name="test.rb" Content-Disposition: attachment; filename="test.rb" Content-Transfer-Encoding: base64 cmVxdWlyZSAndGVzdCcKCnRlc3QgPSBUZXN0Lm5ldwoKcHV0cyAiY2xhc3MsIHN1cGVyY2xhc3Mi CnRlc3QuZm9vCgpjbGFzcyA8PCB0ZXN0CmVuZAoKcHV0cyAiYW5vbiBjbGFzcywgY2xhc3MiCnRl c3QuZm9vCgo= --Multipart=_Fri__25_Feb_2005_00_47_24_+0900_H1gKe1awt96P=EEE Content-Type: application/octet-stream; name="test.c" Content-Disposition: attachment; filename="test.c" Content-Transfer-Encoding: base64 I2luY2x1ZGUgInJ1YnkuaCIKCnN0YXRpYyBWQUxVRQp0ZXN0X2ZvbyhzZWxmKQogICAgVkFMVUUg c2VsZjsKewogICAgcHJpbnRmKCJmb286ICV1IDwgJXVcbiIsIENMQVNTX09GKHNlbGYpLCAKICAg ICAgICAgICByYl9mdW5jYWxsKENMQVNTX09GKHNlbGYpLCByYl9pbnRlcm4oInN1cGVyY2xhc3Mi KSwgMCkpOwogICAgcmV0dXJuIFFuaWw7Cn0KCkluaXRfdGVzdCgpCnsKICBWQUxVRSB0ZXN0ID0g cmJfZGVmaW5lX2NsYXNzKCJUZXN0IiwgcmJfY09iamVjdCk7CiAgcHJpbnRmKCJWQUxVRSB0ZXN0 ID0gJXVcbiIsIHRlc3QpOwogIHJiX2RlZmluZV9tZXRob2QodGVzdCwgImZvbyIsIHRlc3RfZm9v LCAwKTsKfQoK --Multipart=_Fri__25_Feb_2005_00_47_24_+0900_H1gKe1awt96P=EEE--