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

ruby-changes:28712

From: ko1 <ko1@a...>
Date: Wed, 15 May 2013 19:26:36 +0900 (JST)
Subject: [ruby-changes:28712] ko1:r40764 (trunk): * gc.c (newobj): rename to `newobj_of' and accept additional

ko1	2013-05-15 19:26:22 +0900 (Wed, 15 May 2013)

  New Revision: 40764

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

  Log:
    * gc.c (newobj): rename to `newobj_of' and accept additional
      three parameters v1, v2, v3. newobj_of() do OBJSETUP() and
      fill values with v1, v2, v3.
    * gc.c (rb_data_object_alloc, rb_data_typed_object_alloc):
      use newobj_of().

  Modified files:
    trunk/ChangeLog
    trunk/gc.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 40763)
+++ ChangeLog	(revision 40764)
@@ -1,3 +1,12 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Wed May 15 18:58:17 2013  Koichi Sasada  <ko1@a...>
+
+	* gc.c (newobj): rename to `newobj_of' and accept additional
+	  three parameters v1, v2, v3. newobj_of() do OBJSETUP() and
+	  fill values with v1, v2, v3.
+
+	* gc.c (rb_data_object_alloc, rb_data_typed_object_alloc): 
+	  use newobj_of().
+
 Wed May 15 17:55:49 2013  Nobuyoshi Nakada  <nobu@r...>
 
 	* configure.in (RUBY_PLATFORM): move to config.h as needed by
Index: gc.c
===================================================================
--- gc.c	(revision 40763)
+++ gc.c	(revision 40764)
@@ -191,6 +191,12 @@ typedef struct RVALUE { https://github.com/ruby/ruby/blob/trunk/gc.c#L191
 	struct RMatch  match;
 	struct RRational rational;
 	struct RComplex complex;
+	struct {
+	    struct RBasic basic;
+	    VALUE v1;
+	    VALUE v2;
+	    VALUE v3;
+	} values;
     } as;
 #ifdef GC_DEBUG
     const char *file;
@@ -775,7 +781,7 @@ heaps_increment(rb_objspace_t *objspace) https://github.com/ruby/ruby/blob/trunk/gc.c#L781
 }
 
 static VALUE
-newobj(VALUE klass, VALUE flags)
+newobj_of(VALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3)
 {
     rb_objspace_t *objspace = &rb_objspace;
     VALUE obj;
@@ -807,6 +813,20 @@ newobj(VALUE klass, VALUE flags) https://github.com/ruby/ruby/blob/trunk/gc.c#L813
 	unlink_free_heap_slot(objspace, objspace->heap.free_slots);
     }
 
+    /* OBJSETUP */
+    RBASIC(obj)->flags = flags;
+    RBASIC_SET_CLASS(obj, klass);
+    if (rb_safe_level() >= 3) FL_SET((obj), FL_TAINT | FL_UNTRUSTED);
+    RANY(obj)->as.values.v1 = v1;
+    RANY(obj)->as.values.v2 = v2;
+    RANY(obj)->as.values.v3 = v3;
+
+#ifdef GC_DEBUG
+    RANY(obj)->file = rb_sourcefile();
+    RANY(obj)->line = rb_sourceline();
+#endif
+    objspace->total_allocated_object_num++;
+
 #if RGENGC_PROFILE
     if (flags & FL_WB_PROTECTED) objspace->profile.generated_sunny_object_count++;
     else {
@@ -817,13 +837,6 @@ newobj(VALUE klass, VALUE flags) https://github.com/ruby/ruby/blob/trunk/gc.c#L837
     }
 #endif
 
-    MEMZERO((void*)obj, RVALUE, 1);
-#ifdef GC_DEBUG
-    RANY(obj)->file = rb_sourcefile();
-    RANY(obj)->line = rb_sourceline();
-#endif
-    objspace->total_allocated_object_num++;
-
     rgengc_report(5, objspace, "newobj: %p (%s)\n", (void *)obj, obj_type_name(obj));
 
 #if USE_RGENGC && RGENGC_CHECK_MODE
@@ -838,18 +851,13 @@ newobj(VALUE klass, VALUE flags) https://github.com/ruby/ruby/blob/trunk/gc.c#L851
 VALUE
 rb_newobj(void)
 {
-    return newobj(0, T_NONE);
+    return newobj_of(0, T_NONE, 0, 0, 0);
 }
 
 VALUE
 rb_newobj_of(VALUE klass, VALUE flags)
 {
-    VALUE obj;
-
-    obj = newobj(klass, flags);
-    OBJSETUP(obj, klass, flags);
-
-    return obj;
+    return newobj_of(klass, flags, 0, 0, 0);
 }
 
 NODE*
@@ -870,25 +878,15 @@ rb_node_newnode(enum node_type type, VAL https://github.com/ruby/ruby/blob/trunk/gc.c#L878
 VALUE
 rb_data_object_alloc(VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree)
 {
-    NEWOBJ_OF(data, struct RData, klass, T_DATA);
     if (klass) Check_Type(klass, T_CLASS);
-    data->data = datap;
-    data->dfree = dfree;
-    data->dmark = dmark;
-
-    return (VALUE)data;
+    return newobj_of(klass, T_DATA, (VALUE)dmark, (VALUE)dfree, (VALUE)datap);
 }
 
 VALUE
 rb_data_typed_object_alloc(VALUE klass, void *datap, const rb_data_type_t *type)
 {
-    NEWOBJ_OF(data, struct RTypedData, klass, T_DATA);
     if (klass) Check_Type(klass, T_CLASS);
-    data->data = datap;
-    data->typed_flag = 1;
-    data->type = type;
-
-    return (VALUE)data;
+    return newobj_of(klass, T_DATA, (VALUE)type, (VALUE)1, (VALUE)datap);
 }
 
 size_t

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

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