[#37248] [Feature:1.9] Enumerator#inspect — "Yusuke ENDOH" <mame@...>

遠藤です。

12 messages 2008/12/02

[#37337] [Feature #841] Object#self — "rubikitch ." <redmine@...>

Feature #841: Object#self

13 messages 2008/12/09

[#37513] Current status of 1.9.1 RC1's issues — "Yugui (Yuki Sonoda)" <yugui@...>

Hi, folks

14 messages 2008/12/20
[#37516] Re: Current status of 1.9.1 RC1's issues — Masatoshi SEKI <m_seki@...> 2008/12/20

咳といいます。

[#37576] [BUG:trunk] encoding for stdio's — "Yugui (Yuki Sonoda)" <yugui@...>

Yuguiです。

11 messages 2008/12/24

[ruby-dev:37520] Re: [ruby-cvs:28084] Ruby:r20866 (trunk): * error.c (exc_equal): duck typing equal to make it transitive.

From: SASADA Koichi <ko1@...>
Date: 2008-12-21 02:25:11 UTC
List: ruby-dev #37520
 ささだです.

SASADA Koichi wrote::
>   (1.1) 従来通り,必ず false となる
>   (2.2) 従来通り,必ず false となる

の方針で書いたパッチは以下の通りです.

Index: error.c
===================================================================
--- error.c	(リビジョン 20892)
+++ error.c	(作業コピー)
@@ -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))


-- 
// SASADA Koichi at atdot dot net

In This Thread

Prev Next