なかだです。 http://www.daifukuya.com/kagemai/ml/users/msg00253.html http://pc5.2ch.net/test/read.cgi/tech/1087999575/231 で挙げられているエラーは、1.8と1.9でのMethodをdefine_methodした ときの動作の違いによるもののようです。1.8のbase64.rbはHEADから そのままバックポートされているため、引っかかっています。 define_methodされたメソッド内でのsuperは、1.8ではProcから定義さ れたものはdefine_methodのときの名前ですが、Methodから定義された ものは元々の名前になっています。一方1.9ではMethodの場合もProcと 同じようになっています。1.8のほうが統一されていないような気もす るのですが、こちらの動作に戻すべきでしょうか。
Index: eval.c =================================================================== RCS file: /cvs/ruby/src/ruby/eval.c,v retrieving revision 1.676 diff -u -2 -p -r1.676 eval.c --- eval.c 9 Jul 2004 05:29:05 -0000 1.676 +++ eval.c 14 Jul 2004 06:00:39 -0000 @@ -9170,5 +9170,5 @@ rb_mod_define_method(argc, argv, mod) } } - node = method->body; + node = NEW_FBODY(method->body, method->id, rklass); } else if (RDATA(body)->dmark == (RUBY_DATA_FUNC)blk_mark) { Index: lib/base64.rb =================================================================== RCS file: /cvs/ruby/src/ruby/lib/base64.rb,v retrieving revision 1.5 diff -u -2 -p -r1.5 base64.rb --- lib/base64.rb 12 Feb 2004 12:22:18 -0000 1.5 +++ lib/base64.rb 12 Jul 2004 01:06:11 -0000 @@ -120,12 +120,10 @@ module Base64 include Base64 - def _deprecated_base64(*args) + dep = proc do |*args, &block| m0, m1 = caller(0) m = m0[/\`(.*?)\'\z/, 1] warn("#{m1}: #{m} is deprecated; use Base64.#{m} instead") - super + super(*args, &block) end - dep = instance_method(:_deprecated_base64) - remove_method(:_deprecated_base64) for m in Base64.private_instance_methods(false) define_method(m, dep)
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦