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/