diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-11-30 08:43:52 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-11-30 08:43:52 +0000 |
commit | 020cc0ad5c5b4b2b2aac9e0a7fc9d35cfc76dfdc (patch) | |
tree | 345e65a2780135223edf8720e4ed07ed605faef7 /string.c | |
parent | c08785a36278ad10aa977168813e1cfcb531cc7b (diff) | |
download | ruby-020cc0ad5c5b4b2b2aac9e0a7fc9d35cfc76dfdc.tar.gz |
string.c: compare with to_str
* string.c (rb_str_cmp_m): try to compare with to_str result if
possible before calling <=> method. [ruby-core:49279] [Bug #7342]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38044 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'string.c')
-rw-r--r-- | string.c | 6 |
1 files changed, 3 insertions, 3 deletions
@@ -2385,9 +2385,9 @@ rb_str_cmp_m(VALUE str1, VALUE str2) int result; if (!RB_TYPE_P(str2, T_STRING)) { - VALUE tmp; - if (!rb_respond_to(str2, rb_intern("to_str"))) { - return Qnil; + VALUE tmp = rb_check_funcall(str2, rb_intern("to_str"), 0, 0); + if (RB_TYPE_P(tmp, T_STRING)) { + result = rb_str_cmp(str1, tmp); } else if ((tmp = rb_check_funcall(str2, rb_intern("<=>"), 1, &str1)) == Qundef) { |