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

ruby-changes:39990

From: nobu <ko1@a...>
Date: Wed, 7 Oct 2015 17:31:43 +0900 (JST)
Subject: [ruby-changes:39990] nobu:r52071 (trunk): string.c: optimize String#times

nobu	2015-10-07 17:31:22 +0900 (Wed, 07 Oct 2015)

  New Revision: 52071

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=52071

  Log:
    string.c: optimize String#times
    
    * string.c (rb_str_times): optimize for the argument 0 and 1.

  Modified files:
    trunk/ChangeLog
    trunk/string.c
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 52070)
+++ ChangeLog	(revision 52071)
@@ -1,3 +1,7 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Wed Oct  7 17:30:50 2015  Nobuyoshi Nakada  <nobu@r...>
+
+	* string.c (rb_str_times): optimize for the argument 0 and 1.
+
 Wed Oct  7 01:20:46 2015  Koichi Sasada  <ko1@a...>
 
 	* gc.h, gc.c: introduce new debug function rb_obj_info_dump(VALUE obj)
Index: string.c
===================================================================
--- string.c	(revision 52070)
+++ string.c	(revision 52071)
@@ -1598,6 +1598,15 @@ rb_str_times(VALUE str, VALUE times) https://github.com/ruby/ruby/blob/trunk/string.c#L1598
     char *ptr2;
     int termlen;
 
+    if (times == INT2FIX(1)) {
+	return rb_str_dup(str);
+    }
+    if (times == INT2FIX(0)) {
+	str2 = str_alloc(rb_obj_class(str));
+	rb_enc_copy(str2, str);
+	OBJ_INFECT(str2, str);
+	return str2;
+    }
     len = NUM2LONG(times);
     if (len < 0) {
 	rb_raise(rb_eArgError, "negative argument");

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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