Kagemusha的には結局これだけかね。
Index: eval.c =================================================================== --- eval.c (リビジョン 13964) +++ eval.c (作業コピー) @@ -9340,7 +9340,7 @@ Data_Get_Struct(method, struct METHOD, data); if (data->rklass != rklass) { - if (FL_TEST(data->rklass, FL_SINGLETON)) { + if (TYPE(data->rklass) != T_CLASS && FL_TEST(data->rklass, FL_SINGLETON)) { rb_raise(rb_eTypeError, "singleton method bound for a different object"); } if (TYPE(data->rklass) == T_MODULE) {しかしこれはどうなんだろうか。
irb(main):001:0> module Foo;def self.aa;:aa;end;end => nil irb(main):002:0> Foo.aa => :aa irb(main):003:0> Foo.method(:aa).unbind.bind(Foo) => #<Method: Foo.aa> irb(main):004:0> Foo.method(:aa).unbind.bind(Foo).call => :aa irb(main):005:0> class Bar;end => nil irb(main):006:0> Foo.method(:aa).unbind.bind(Bar) TypeError: bind argument must be an instance of Module from (irb):6:in `bind' from (irb):6
Object#finalizeの実行は保証されていないでしょう
まさしくその通りであり心より恥じる。
Rjbが参照を解放してるかどうか見たい。Runtime#addShutdownHookか。あとでやる。