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

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/

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