[前][次][番号順一覧][スレッド一覧]

ruby-changes:25986

From: nobu <ko1@a...>
Date: Fri, 30 Nov 2012 17:44:03 +0900 (JST)
Subject: [ruby-changes:25986] nobu:r38043 (trunk): string.c: use rb_check_funcall

nobu	2012-11-30 17:43:47 +0900 (Fri, 30 Nov 2012)

  New Revision: 38043

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=38043

  Log:
    string.c: use rb_check_funcall
    
    * string.c (rb_str_cmp_m): use rb_check_funcall instead of respond_to
      and call.

  Modified files:
    trunk/ChangeLog
    trunk/string.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 38042)
+++ ChangeLog	(revision 38043)
@@ -1,5 +1,8 @@
-Fri Nov 30 17:43:39 2012  Nobuyoshi Nakada  <nobu@r...>
+Fri Nov 30 17:43:45 2012  Nobuyoshi Nakada  <nobu@r...>
 
+	* string.c (rb_str_cmp_m): use rb_check_funcall instead of respond_to
+	  and call.
+
 	* string.c (rb_str_cmp_m): return fixed value, one of -1,0,+1 always.
 
 	* string.c (rb_str_cmp_m): try to compare with to_str result if
Index: string.c
===================================================================
--- string.c	(revision 38042)
+++ string.c	(revision 38043)
@@ -2385,15 +2385,15 @@
     int result;
 
     if (!RB_TYPE_P(str2, T_STRING)) {
+	VALUE tmp;
 	if (!rb_respond_to(str2, rb_intern("to_str"))) {
 	    return Qnil;
 	}
-	else if (!rb_respond_to(str2, rb_intern("<=>"))) {
+	else if ((tmp = rb_check_funcall(str2, rb_intern("<=>"), 1, &str1)) ==
+		 Qundef) {
 	    return Qnil;
 	}
 	else {
-	    VALUE tmp = rb_funcall(str2, rb_intern("<=>"), 1, str1);
-
 	    if (NIL_P(tmp)) return Qnil;
 	    result = -rb_cmpint(tmp, str1, str2);
 	}

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]