ruby-changes:2006
From: ko1@a...
Date: 23 Sep 2007 09:05:22 +0900
Subject: [ruby-changes:2006] nobu - Ruby:r13497 (ruby_1_8, trunk): * gc.c (os_obj_of, os_each_obj): hide objects to be finalized.
nobu 2007-09-23 09:05:07 +0900 (Sun, 23 Sep 2007) New Revision: 13497 Modified files: branches/ruby_1_8/ChangeLog branches/ruby_1_8/gc.c branches/ruby_1_8/version.h trunk/ChangeLog trunk/gc.c Log: * gc.c (os_obj_of, os_each_obj): hide objects to be finalized. [ruby-dev:31810] http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=13497&r2=13496 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13497&r2=13496 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/gc.c?r1=13497&r2=13496 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/version.h?r1=13497&r2=13496 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/gc.c?r1=13497&r2=13496 Index: ChangeLog =================================================================== --- ChangeLog (revision 13496) +++ ChangeLog (revision 13497) @@ -1,3 +1,8 @@ +Sun Sep 23 09:05:05 2007 Nobuyoshi Nakada <nobu@r...> + + * gc.c (os_obj_of, os_each_obj): hide objects to be finalized. + [ruby-dev:31810] + Sun Sep 23 08:58:01 2007 Nobuyoshi Nakada <nobu@r...> * eval_method.ci (rb_attr): should not use alloca for unknowen size Index: gc.c =================================================================== --- gc.c (revision 13496) +++ gc.c (revision 13497) @@ -1692,37 +1692,6 @@ } static VALUE -os_live_obj(void) -{ - int i; - int n = 0; - - for (i = 0; i < heaps_used; i++) { - RVALUE *p, *pend; - - p = heaps[i].slot; pend = p + heaps[i].limit; - for (;p < pend; p++) { - if (p->as.basic.flags) { - switch (TYPE(p)) { - case T_ICLASS: - case T_NODE: - case T_VALUES: - continue; - case T_CLASS: - if (FL_TEST(p, FL_SINGLETON)) continue; - default: - if (!p->as.basic.klass) continue; - rb_yield((VALUE)p); - n++; - } - } - } - } - - return INT2FIX(n); -} - -static VALUE os_obj_of(VALUE of) { int i; @@ -1734,7 +1703,8 @@ p = heaps[i].slot; pend = p + heaps[i].limit; for (;p < pend; p++) { if (p->as.basic.flags) { - switch (TYPE(p)) { + switch (BUILTIN_TYPE(p)) { + case T_NONE: case T_ICLASS: case T_NODE: case T_VALUES: @@ -1743,7 +1713,7 @@ if (FL_TEST(p, FL_SINGLETON)) continue; default: if (!p->as.basic.klass) continue; - if (rb_obj_is_kind_of((VALUE)p, of)) { + if (!of || rb_obj_is_kind_of((VALUE)p, of)) { rb_yield((VALUE)p); n++; } @@ -1795,11 +1765,9 @@ rb_secure(4); if (rb_scan_args(argc, argv, "01", &of) == 0) { - return os_live_obj(); + of = 0; } - else { - return os_obj_of(of); - } + return os_obj_of(of); } static VALUE finalizers; Index: ruby_1_8/ChangeLog =================================================================== --- ruby_1_8/ChangeLog (revision 13496) +++ ruby_1_8/ChangeLog (revision 13497) @@ -1,3 +1,8 @@ +Sun Sep 23 09:05:05 2007 Nobuyoshi Nakada <nobu@r...> + + * gc.c (os_obj_of, os_each_obj): hide objects to be finalized. + [ruby-dev:31810] + Sun Sep 23 08:58:01 2007 Nobuyoshi Nakada <nobu@r...> * eval_method.ci (rb_attr): should not use alloca for unknowen size Index: ruby_1_8/version.h =================================================================== --- ruby_1_8/version.h (revision 13496) +++ ruby_1_8/version.h (revision 13497) @@ -1,7 +1,7 @@ #define RUBY_VERSION "1.8.6" -#define RUBY_RELEASE_DATE "2007-09-22" +#define RUBY_RELEASE_DATE "2007-09-23" #define RUBY_VERSION_CODE 186 -#define RUBY_RELEASE_CODE 20070922 +#define RUBY_RELEASE_CODE 20070923 #define RUBY_PATCHLEVEL 5000 #define RUBY_VERSION_MAJOR 1 @@ -9,7 +9,7 @@ #define RUBY_VERSION_TEENY 6 #define RUBY_RELEASE_YEAR 2007 #define RUBY_RELEASE_MONTH 9 -#define RUBY_RELEASE_DAY 22 +#define RUBY_RELEASE_DAY 23 #ifdef RUBY_EXTERN RUBY_EXTERN const char ruby_version[]; Index: ruby_1_8/gc.c =================================================================== --- ruby_1_8/gc.c (revision 13496) +++ ruby_1_8/gc.c (revision 13497) @@ -1599,38 +1599,6 @@ } static VALUE -os_live_obj() -{ - int i; - int n = 0; - - for (i = 0; i < heaps_used; i++) { - RVALUE *p, *pend; - - p = heaps[i].slot; pend = p + heaps[i].limit; - for (;p < pend; p++) { - if (p->as.basic.flags) { - switch (TYPE(p)) { - case T_ICLASS: - case T_VARMAP: - case T_SCOPE: - case T_NODE: - continue; - case T_CLASS: - if (FL_TEST(p, FL_SINGLETON)) continue; - default: - if (!p->as.basic.klass) continue; - rb_yield((VALUE)p); - n++; - } - } - } - } - - return INT2FIX(n); -} - -static VALUE os_obj_of(of) VALUE of; { @@ -1644,6 +1612,7 @@ for (;p < pend; p++) { if (p->as.basic.flags) { switch (TYPE(p)) { + case T_NONE: case T_ICLASS: case T_VARMAP: case T_SCOPE: @@ -1653,7 +1622,7 @@ if (FL_TEST(p, FL_SINGLETON)) continue; default: if (!p->as.basic.klass) continue; - if (rb_obj_is_kind_of((VALUE)p, of)) { + if (!of || rb_obj_is_kind_of((VALUE)p, of)) { rb_yield((VALUE)p); n++; } @@ -1707,11 +1676,9 @@ rb_secure(4); if (rb_scan_args(argc, argv, "01", &of) == 0) { - return os_live_obj(); + of = 0; } - else { - return os_obj_of(of); - } + return os_obj_of(of); } static VALUE finalizers; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml