[#25636] [Oniguruma 3.X] reggnu.c — "K.Kosako" <sndgk393@...>

さっき気がついたのですが、元々は

15 messages 2005/02/05

[#25655] openssl binding for SSL_CTX_set_default_verify_paths and X509_STORE_set_default_paths — Tanaka Akira <akr@...17n.org>

open-uri で https を扱うことを考えていろいろと調べていた所、openssl で、

9 messages 2005/02/08
[#25670] Re: openssl binding for SSL_CTX_set_default_verify_paths and X509_STORE_set_default_paths — GOTOU Yuuzou <gotoyuzo@...> 2005/02/10

In message <876513vce0.fsf@serein.a02.aist.go.jp>,

[#25713] pthread trouble on sighandler — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

17 messages 2005/02/18
[#25714] Re: pthread trouble on sighandler — Yukihiro Matsumoto <matz@...> 2005/02/18

まつもと ゆきひろです

[#25755] I/O operation differs signal handler — Minero Aoki <aamine@...>

青木です。

14 messages 2005/02/24
[#25756] Re: I/O operation differs signal handler — Tanaka Akira <akr@...17n.org> 2005/02/24

In article <20050224091450P.aamine@loveruby.net>,

[ruby-dev:25764] Anonymous class

From: Masao Mutoh <mutoh@...>
Date: 2005-02-24 15:47:37 UTC
List: ruby-dev #25764
むとうです。

最近、特異クラスの実装が変わったように
見受けられます。そのため、特異クラスを用いた
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<mutoh@highway.ne.jp>

Attachments (3)

extconf.rb (40 Bytes, text/x-ruby)
require 'mkmf'

create_makefile 'test'

test.rb (122 Bytes, text/x-ruby)
require 'test'

test = Test.new

puts "class, superclass"
test.foo

class << test
end

puts "anon class, class"
test.foo

test.c (351 Bytes, text/x-csrc)
#include "ruby.h"

static VALUE
test_foo(self)
    VALUE self;
{
    printf("foo: %u < %u\n", CLASS_OF(self), 
           rb_funcall(CLASS_OF(self), rb_intern("superclass"), 0));
    return Qnil;
}

Init_test()
{
  VALUE test = rb_define_class("Test", rb_cObject);
  printf("VALUE test = %u\n", test);
  rb_define_method(test, "foo", test_foo, 0);
}

In This Thread

Prev Next