ruby-changes:9430
From: ko1 <ko1@a...>
Date: Wed, 24 Dec 2008 21:03:08 +0900 (JST)
Subject: [ruby-changes:9430] Ruby:r20968 (trunk): * error.c (exc_equal): == method should not raise Exception.
ko1 2008-12-24 21:02:21 +0900 (Wed, 24 Dec 2008) New Revision: 20968 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=20968 Log: * error.c (exc_equal): == method should not raise Exception. [ruby-dev:37519] * sample/test.rb: fix test. Modified files: trunk/ChangeLog trunk/error.c trunk/sample/test.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 20967) +++ ChangeLog (revision 20968) @@ -1,3 +1,10 @@ +Wed Dec 24 20:59:12 2008 Koichi Sasada <ko1@a...> + + * error.c (exc_equal): == method should not raise Exception. + [ruby-dev:37519] + + * sample/test.rb: fix test. + Wed Dec 24 20:33:45 2008 Koichi Sasada <ko1@a...> * vm_insnhelper.c (vm_call_method): use class of method defined Index: sample/test.rb =================================================================== --- sample/test.rb (revision 20967) +++ sample/test.rb (revision 20968) @@ -661,9 +661,11 @@ end test_ok(false) rescue => e - test_ok(true) if $! == e + test_ok($! == e) + test_ok(e.message == $string) + test_ok(e != $string) end - + # exception in ensure clause begin begin Index: error.c =================================================================== --- error.c (revision 20967) +++ error.c (revision 20968) @@ -559,14 +559,25 @@ if (exc == obj) return Qtrue; CONST_ID(id_mesg, "mesg"); + if (rb_obj_class(exc) != rb_obj_class(obj)) { - mesg = rb_funcall(obj, rb_intern("message"), 0, 0); - backtrace = rb_funcall(obj, rb_intern("backtrace"), 0, 0); + ID id_message, id_backtrace; + CONST_ID(id_message, "message"); + CONST_ID(id_backtrace, "backtrace"); + + if (rb_respond_to(obj, id_message) && rb_respond_to(obj, id_backtrace)) { + mesg = rb_funcall(obj, id_message, 0, 0); + backtrace = rb_funcall(obj, id_backtrace, 0, 0); + } + else { + return Qfalse; + } } else { mesg = rb_attr_get(obj, id_mesg); backtrace = exc_backtrace(obj); } + if (!rb_equal(rb_attr_get(exc, id_mesg), mesg)) return Qfalse; if (!rb_equal(exc_backtrace(exc), backtrace)) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/