зеркало из https://github.com/github/ruby.git
* gc.c (os_obj_of, os_each_obj): hide objects to be finalized.
[ruby-dev:31810] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13497 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
0a274820bd
Коммит
c9faac88af
|
@ -1,3 +1,8 @@
|
|||
Sun Sep 23 09:05:05 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* 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@ruby-lang.org>
|
||||
|
||||
* eval_method.ci (rb_attr): should not use alloca for unknowen size
|
||||
|
|
42
gc.c
42
gc.c
|
@ -1691,37 +1691,6 @@ Init_heap(void)
|
|||
add_heap();
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
|
@ -1734,7 +1703,8 @@ os_obj_of(VALUE of)
|
|||
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 @@ os_obj_of(VALUE of)
|
|||
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 @@ os_each_obj(int argc, VALUE *argv)
|
|||
|
||||
rb_secure(4);
|
||||
if (rb_scan_args(argc, argv, "01", &of) == 0) {
|
||||
return os_live_obj();
|
||||
}
|
||||
else {
|
||||
return os_obj_of(of);
|
||||
of = 0;
|
||||
}
|
||||
return os_obj_of(of);
|
||||
}
|
||||
|
||||
static VALUE finalizers;
|
||||
|
|
Загрузка…
Ссылка в новой задаче