diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-03-15 07:57:11 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-03-15 07:57:11 +0000 |
commit | e5052b18f0553b56586dfd67dff05774ba07f855 (patch) | |
tree | b7a8ee25dcd179c1f4b2749c694cd26823413eec /string.c | |
parent | 5c4d2fe8bd5246de0f427ebefc0df54b41093453 (diff) | |
download | ruby-e5052b18f0553b56586dfd67dff05774ba07f855.tar.gz |
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.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57978 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'string.c')
-rw-r--r-- | string.c | 23 |
1 files changed, 19 insertions, 4 deletions
@@ -3189,6 +3189,9 @@ rb_str_cmp_m(VALUE str1, VALUE str2) 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) 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) 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) 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) 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)); } /* |