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/