なかだです。

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はできる。 中田 伸悦