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

ruby-changes:8666

From: yugui <ko1@a...>
Date: Tue, 11 Nov 2008 20:02:23 +0900 (JST)
Subject: [ruby-changes:8666] Ruby:r20202 (ruby_1_9_1): merges r20164 from trunk into ruby_1_9_1.

yugui	2008-11-11 20:01:57 +0900 (Tue, 11 Nov 2008)

  New Revision: 20202

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

  Log:
    merges r20164 from trunk into ruby_1_9_1.
    * struct.c (rb_struct_initialize_m): avoid unnecessary array
      allocation.

  Modified files:
    branches/ruby_1_9_1/ChangeLog
    branches/ruby_1_9_1/struct.c

Index: ruby_1_9_1/ChangeLog
===================================================================
--- ruby_1_9_1/ChangeLog	(revision 20201)
+++ ruby_1_9_1/ChangeLog	(revision 20202)
@@ -1,3 +1,8 @@
+Sun Nov  9 13:04:52 2008  Yukihiro Matsumoto  <matz@r...>
+
+	* struct.c (rb_struct_initialize_m): avoid unnecessary array
+	  allocation.
+
 Sun Nov  9 04:10:19 2008  Nobuyoshi Nakada  <nobu@r...>
 
 	* vm_dump.c (control_frame_dump): suppresses finished method name.
Index: ruby_1_9_1/struct.c
===================================================================
--- ruby_1_9_1/struct.c	(revision 20201)
+++ ruby_1_9_1/struct.c	(revision 20202)
@@ -352,25 +352,30 @@
 /*
  */
 
-VALUE
-rb_struct_initialize(VALUE self, VALUE values)
+static VALUE
+rb_struct_initialize_m(int argc, VALUE *argv, VALUE self)
 {
     VALUE klass = rb_obj_class(self);
     long n;
 
     rb_struct_modify(self);
     n = num_members(klass);
-    if (n < RARRAY_LEN(values)) {
+    if (n < argc) {
 	rb_raise(rb_eArgError, "struct size differs");
     }
-    MEMCPY(RSTRUCT_PTR(self), RARRAY_PTR(values), VALUE, RARRAY_LEN(values));
-    if (n > RARRAY_LEN(values)) {
-	rb_mem_clear(RSTRUCT_PTR(self)+RARRAY_LEN(values),
-		     n-RARRAY_LEN(values));
+    MEMCPY(RSTRUCT_PTR(self), argv, VALUE, argc);
+    if (n > argc) {
+	rb_mem_clear(RSTRUCT_PTR(self)+argc, n-argc);
     }
     return Qnil;
 }
 
+VALUE
+rb_struct_initialize(VALUE self, VALUE values)
+{
+    return rb_struct_initialize_m(RARRAY_LEN(values), RARRAY_PTR(values), self);
+}
+
 static VALUE
 struct_alloc(VALUE klass)
 {
@@ -879,7 +884,7 @@
     rb_undef_alloc_func(rb_cStruct);
     rb_define_singleton_method(rb_cStruct, "new", rb_struct_s_def, -1);
 
-    rb_define_method(rb_cStruct, "initialize", rb_struct_initialize, -2);
+    rb_define_method(rb_cStruct, "initialize", rb_struct_initialize_m, -1);
     rb_define_method(rb_cStruct, "initialize_copy", rb_struct_init_copy, 1);
 
     rb_define_method(rb_cStruct, "==", rb_struct_equal, 1);

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

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