From: "H.Yamamoto" Date: 2005-05-18T16:27:55+09:00 Subject: [ruby-dev:26182] Re: autobuild failure: test_exception_subclass(SOAP::Marshal::TestMarshal) 山本です。 >これもException#exceptionが常にException#initializeを呼ぶことを >利用していたためですね。これはRegexpやRangeと同様にすれば通ると >思うのですが、それとも#exceptionは特別扱いにしたほうがいいでしょ >うか。 元々の問題は NameError のような一部例外で super が呼ばれていない という物だったと思います。Exception#exception で initialize と initalize_copy の 両方が呼ばれてるのも気持ち悪いですし、Exception#exception は以前の挙動で いいんじゃないかという気がします。 //////////////////////////// // コード class Exception alias initialize_ initialize def initialize(*a) initialize_(*a) puts "initialize" end alias initialize_copy_ initialize_copy def initialize_copy(*a) initialize_copy_(*a) puts "initialize_copy" end end e = NameError.new puts "-------------------------" e.exception("aaa") //////////////////////////// // 以前の挙動 E:\>ruby -v d.rb ruby 1.8.2 (2005-05-12) [i386-bccwin32] ------------------------- initialize_copy //////////////////////////// // 現在の挙動 E:\ruby-cvs\bcc32_1_8>ruby18 -v \d.rb ruby 1.8.3 (2005-05-17) [i386-bccwin32] initialize ------------------------- initialize_copy initialize ///////////////////////// // 添付パッチ後 E:\ruby-cvs\bcc32_1_8>ruby18 -v \d.rb ruby 1.8.3 (2005-05-17) [i386-bccwin32] initialize ------------------------- initialize_copy Index: error.c =================================================================== RCS file: /src/ruby/error.c,v retrieving revision 1.85.2.13 diff -u -w -b -p -r1.85.2.13 error.c --- error.c 14 May 2005 14:59:53 -0000 1.85.2.13 +++ error.c 18 May 2005 07:12:00 -0000 @@ -384,7 +384,7 @@ exc_exception(argc, argv, self) if (argc == 0) return self; if (argc == 1 && self == argv[0]) return self; exc = rb_obj_clone(self); - rb_obj_call_init(exc, argc, argv); + exc_initialize(argc, argv, exc); return exc; }