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

ruby-changes:3514

From: ko1@a...
Date: Sun, 13 Jan 2008 15:36:41 +0900 (JST)
Subject: [ruby-changes:3514] nobu - Ruby:r14992 (trunk): * string.c (rb_str_append): performance improvement.

nobu	2008-01-11 16:55:23 +0900 (Fri, 11 Jan 2008)

  New Revision: 14992

  Modified files:
    trunk/ChangeLog
    trunk/string.c

  Log:
    * string.c (rb_str_append): performance improvement.


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/string.c?r1=14992&r2=14991&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=14992&r2=14991&diff_format=u

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 14991)
+++ ChangeLog	(revision 14992)
@@ -1,3 +1,7 @@
+Fri Jan 11 16:55:21 2008  Nobuyoshi Nakada  <nobu@r...>
+
+	* string.c (rb_str_append): performance improvement.
+
 Fri Jan 11 12:35:56 2008  Nobuyoshi Nakada  <nobu@r...>
 
 	* configure.in: moved broken syscall checks from process.c etc.
Index: string.c
===================================================================
--- string.c	(revision 14991)
+++ string.c	(revision 14992)
@@ -1194,25 +1194,25 @@
     int cr, cr2;
 
     StringValue(str2);
-    enc = rb_enc_check(str, str2);
-    cr = ENC_CODERANGE(str);
-    if ((cr2 = ENC_CODERANGE(str2)) > cr) cr = cr2;
-    rb_str_modify(str);
     if (RSTRING_LEN(str2) > 0) {
 	if (STR_ASSOC_P(str)) {
 	    long len = RSTRING_LEN(str)+RSTRING_LEN(str2);
+	    enc = rb_enc_check(str, str2);
+	    cr = ENC_CODERANGE(str);
+	    if ((cr2 = ENC_CODERANGE(str2)) > cr) cr = cr2;
+	    rb_str_modify(str);
 	    REALLOC_N(RSTRING(str)->as.heap.ptr, char, len+1);
 	    memcpy(RSTRING(str)->as.heap.ptr + RSTRING(str)->as.heap.len,
 		   RSTRING_PTR(str2), RSTRING_LEN(str2)+1);
 	    RSTRING(str)->as.heap.len = len;
+	    rb_enc_associate(str, enc);
+	    ENC_CODERANGE_SET(str, cr);
 	}
 	else {
-	    rb_str_buf_append(str, str2);
+	    return rb_str_buf_append(str, str2);
 	}
     }
     OBJ_INFECT(str, str2);
-    rb_enc_associate(str, enc);
-    ENC_CODERANGE_SET(str, cr);
     return str;
 }
 

--
ML: ruby-changes@q...
Info: 

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