ruby-changes:45905
From: nobu <ko1@a...>
Date: Wed, 15 Mar 2017 16:57:22 +0900 (JST)
Subject: [ruby-changes:45905] nobu:r57978 (trunk): string.c: shortcut argument check
nobu 2017-03-15 16:57:11 +0900 (Wed, 15 Mar 2017) New Revision: 57978 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=57978 Log: string.c: shortcut argument check * string.c (str_casecmp, str_casecmp_p): split to skip argument check when it is a String certainly. * string.c (sym_casecmp, sym_casecmp_p): shortcut argument checks. Modified files: trunk/string.c Index: string.c =================================================================== --- string.c (revision 57977) +++ string.c (revision 57978) @@ -3189,6 +3189,9 @@ rb_str_cmp_m(VALUE str1, VALUE str2) https://github.com/ruby/ruby/blob/trunk/string.c#L3189 return INT2FIX(result); } +static VALUE str_casecmp(VALUE str1, VALUE str2); +static VALUE str_casecmp_p(VALUE str1, VALUE str2); + /* * call-seq: * str.casecmp(other_str) -> -1, 0, +1, or nil @@ -3210,11 +3213,17 @@ rb_str_cmp_m(VALUE str1, VALUE str2) https://github.com/ruby/ruby/blob/trunk/string.c#L3213 static VALUE rb_str_casecmp(VALUE str1, VALUE str2) { + StringValue(str2); + return str_casecmp(str1, str2); +} + +static VALUE +str_casecmp(VALUE str1, VALUE str2) +{ long len; rb_encoding *enc; char *p1, *p1end, *p2, *p2end; - StringValue(str2); enc = rb_enc_compatible(str1, str2); if (!enc) { return Qnil; @@ -3286,11 +3295,17 @@ rb_str_casecmp(VALUE str1, VALUE str2) https://github.com/ruby/ruby/blob/trunk/string.c#L3295 static VALUE rb_str_casecmp_p(VALUE str1, VALUE str2) { + StringValue(str2); + return str_casecmp_p(str1, str2); +} + +static VALUE +str_casecmp_p(VALUE str1, VALUE str2) +{ rb_encoding *enc; VALUE folded_str1, folded_str2; VALUE fold_opt = sym_fold; - StringValue(str2); enc = rb_enc_compatible(str1, str2); if (!enc) { return Qnil; @@ -9827,7 +9842,7 @@ sym_casecmp(VALUE sym, VALUE other) https://github.com/ruby/ruby/blob/trunk/string.c#L9842 if (!SYMBOL_P(other)) { return Qnil; } - return rb_str_casecmp(rb_sym2str(sym), rb_sym2str(other)); + return str_casecmp(rb_sym2str(sym), rb_sym2str(other)); } /* @@ -9857,7 +9872,7 @@ sym_casecmp_p(VALUE sym, VALUE other) https://github.com/ruby/ruby/blob/trunk/string.c#L9872 if (!SYMBOL_P(other)) { return Qnil; } - return rb_str_casecmp_p(rb_sym2str(sym), rb_sym2str(other)); + return str_casecmp_p(rb_sym2str(sym), rb_sym2str(other)); } /* -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/