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

ruby-changes:17545

From: nobu <ko1@a...>
Date: Thu, 21 Oct 2010 23:57:04 +0900 (JST)
Subject: [ruby-changes:17545] Ruby:r29550 (trunk): * gc.c (objspace_each_objects, rb_objspace_each_objects): use

nobu	2010-10-21 23:56:55 +0900 (Thu, 21 Oct 2010)

  New Revision: 29550

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

  Log:
    * gc.c (objspace_each_objects, rb_objspace_each_objects): use
      struct.

  Modified files:
    trunk/ChangeLog
    trunk/gc.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 29549)
+++ ChangeLog	(revision 29550)
@@ -1,5 +1,8 @@
-Thu Oct 21 23:52:00 2010  Nobuyoshi Nakada  <nobu@r...>
+Thu Oct 21 23:56:54 2010  Nobuyoshi Nakada  <nobu@r...>
 
+	* gc.c (objspace_each_objects, rb_objspace_each_objects): use
+	  struct.
+
 	* gc.c (objspace_each_objects): fix return with no value.
 
 Thu Oct 21 23:47:12 2010  Nobuyoshi Nakada  <nobu@r...>
Index: gc.c
===================================================================
--- gc.c	(revision 29549)
+++ gc.c	(revision 29550)
@@ -2514,6 +2514,13 @@
     return Qnil;
 }
 
+typedef int each_obj_callback(void *, void *, size_t, void *);
+
+struct each_obj_args {
+    each_obj_callback *callback;
+    void *data;
+};
+
 static VALUE
 objspace_each_objects(VALUE arg)
 {
@@ -2521,7 +2528,7 @@
     RVALUE *membase = 0;
     RVALUE *pstart, *pend;
     rb_objspace_t *objspace = &rb_objspace;
-    VALUE *args = (VALUE *)arg;
+    struct each_obj_args *args = (struct each_obj_args *)arg;
     volatile VALUE v;
 
     i = 0;
@@ -2544,7 +2551,7 @@
 	    }
 	}
 	if (pstart != pend) {
-	    if ((*(int (*)(void *, void *, size_t, void *))args[0])(pstart, pend, sizeof(RVALUE), (void *)args[1])) {
+	    if ((*args->callback)(pstart, pend, sizeof(RVALUE), args->data)) {
 		break;
 	    }
 	}
@@ -2590,19 +2597,17 @@
  *       use some constant value in the iteration.
  */
 void
-rb_objspace_each_objects(int (*callback)(void *vstart, void *vend,
-					 size_t stride, void *d),
-			 void *data)
+rb_objspace_each_objects(each_obj_callback *callback, void *data)
 {
-    VALUE args[2];
+    struct each_obj_args args;
     rb_objspace_t *objspace = &rb_objspace;
 
     rest_sweep(objspace);
     objspace->flags.dont_lazy_sweep = TRUE;
 
-    args[0] = (VALUE)callback;
-    args[1] = (VALUE)data;
-    rb_ensure(objspace_each_objects, (VALUE)args, lazy_sweep_enable, Qnil);
+    args.callback = callback;
+    args.data = data;
+    rb_ensure(objspace_each_objects, (VALUE)&args, lazy_sweep_enable, Qnil);
 }
 
 struct os_each_struct {

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

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